[英]JSF 1.2 injecting javaScript that causes w3c Validation failure
我们对DDA的要求很高的项目的目标之一是,确保呈现的HTML 100%兼容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
文件以完全相同的包结构复制到webapp项目中,即作为com.sun.faces
包中的sunjsf.js
文件。 编辑<
到<
并保存。 在类加载层次结构中,此文件将优先于JAR文件中的文件,因此将被代替使用。
另外,您也可以始终使用编辑后的JS文件重建JAR文件本身。
尝试像这样更改您的脚本块
<script type="text/javascript">
//<[!CDATA[
...your code here
//]]>
</script>
这应该使整个脚本块被验证器解析器忽略:如果您的代码源包含大于(>),小于(<)之类的字符,则必须将其放入CDATA
分隔符中以进行验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.