Facelets是基于XML的视图技术,它使用XHTML+XML生成HTML输出。XML具有五个特殊字符,XML解析器对其进行了特殊处理:
<
标签的开始。>
标签的结尾。"
属性值的开始和结束。'
属性值的替代开始和结束。&
实体的开头(以结尾;
)。
在这种情况下
<,XML解析器会隐式地寻找标签名称和结束标签
>。但是,在您的特定情况下,您使用的
<是Javascript运算符,而不是XML实体。这完全解释了您遇到的XML解析错误:
元素的内容必须包含格式正确的字符数据或标记。
本质上,您在错误的位置编写了Javascript代码,而不是JS文件而不是JS文件,因此您应该相应地转义所有XML特殊字符。在
<必须进行转义为
<。
因此,基本上,
for (var i = 0; i < length; i++) {
必须成为
for (var i = 0; i < length; i++) {
使它对XML有效。
但是,这使Javascript代码更难以阅读和维护。如Mozilla开发人员网络出色的文档“为XHTML编写Javascript”所述,您应该将Javascript代码放在字符数据(CDATA)块中。因此,按照JSF的说法,它将是:
<h:outputscript> <![CDATA[ // ... ]]></h:outputscript>
XML解析器将把块的内容解释为“plain vanilla”字符数据而不是XML,因此将XML特殊字符“按原样”解释。
但是,更好的方法是将JS代码放在自己的JS文件中,该文件应由
<scriptsrc>或以JSF的形式包含在其中
<h:outputscript>。
<h:outputscript name="functions.js" target="head" />
这样,您无需担心JS代码中的XML特殊字符。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)