JSF 1.2 注入导致 w3c 验证失败的 javaScript
JSF 1.2 injecting javaScript that causes w3c Validation failure
我们项目的目标之一是确保渲染的HTML100%符合xhtml 1.0过渡语法。可悲的是,我有一个我无法消除的错误。这是因为 JSF 将以下 javaScript 片段注入到页面中(为清楚起见,格式化了该片段),因为它没有包装在 CDATA 中,所以 w3c 验证器会拒绝并显示以下消息:
Line 443, Column 122: character "<" is the first character of a delimiter but occurred as data
…dp;if (adp != null) {for (var i = 0;i < adp.length;i++) {f.removeChild(adp[i])…
?
This message may appear in several cases:
You tried to include the "<" character in your page: you should escape it as "<"
You used an unescaped ampersand "&": this may be valid in some contexts, but it is recommended to use "&", which is always safe.
Another possibility is that you forgot to close quotes in a previous tag.
我的问题是,是否有可能让 JSF 将脚本块包装在 CDATA 中或外部化脚本?
<script type="text/javascript" language="Javascript">
function dpf(f) {
var adp = f.adp;
if (adp != null) {
for (var i = 0;i < adp.length;i++) {
f.removeChild(adp[i]);
}}};
function apf(f, pvp) {
var adp = new Array();
f.adp = adp;
var ps = pvp.split(',');
for (var i = 0,ii = 0;i < ps.length;i++,ii++) {
var p = document.createElement("input");p.type = "hidden";p.name = ps[i];p.value = ps[i + 1];
f.appendChild(p);
adp[ii] = p;i += 1;
}};
function jsfcljs(f, pvp, t) {
apf(f, pvp);
var ft = f.target;
if (t) {
f.target = t;
}
f.submit();
f.target = ft;dpf(f);
};
</script>
如果不编辑JS文件本身,这是不可能的。
解压缩jsf-impl.jar
文件,com/sun/faces/sunjsf.js
文件复制到完全相同的包结构的 Web 应用程序项目中,即作为包内的sunjsf.js
文件com.sun.faces
。编辑要<
<
并保存。此文件将优先于 类加载层次结构中 JAR 文件中的文件,因此将改为使用。
或者,您也可以始终使用编辑后的 JS 文件重建 JAR 文件本身。
尝试像这样更改脚本块
<script type="text/javascript">
//<[!CDATA[
...your code here
//]]>
</script>
这应该使整个脚本块被验证器解析器忽略:如果你的代码源包含大于(>),小于(<)这样的字符,你必须把它放在CDATA
分隔符中才能使其得到验证。
相关文章:
- 添加@javascript标记时,Cucumber中的HTTP身份验证失败
- postmates api的AJAX中的HTTP身份验证失败
- Spring Security中的基本身份验证(身份验证失败消息)
- 表单验证失败,但仍提交
- ExtJs 4 GridPanel with CellEdit:输入的数据在验证失败时丢失
- 验证失败时禁用按钮
- 即使验证失败,表单也会被提交
- 即使验证失败,表单也会提交
- jQuery长度验证失败
- 当表单验证失败时,我将如何最好地处理下一个事件
- 验证失败时阻止表单提交(Angular Material)
- OAuth错误:签名验证失败
- 如果在ASP.Net MVC视图中验证失败,请设置httppostedfilebase
- reCaptcha-验证失败
- 循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false
- jQuery 在多步骤表单上验证失败后中断
- 停止 C# 在下拉列表 javascript 验证失败时继续执行服务器端脚本
- X 可编辑:验证失败时关闭编辑区域
- Django AJAX:CSRF 验证失败表示缺少 csrf 令牌
- 将变量从jQuery传递到WebMethod(身份验证失败)