我经常在我的JSF XHTML页面上使用Javascript&&在其中,我最终必须编码为&&
例如,当我将以下内容放在我的JSF XHTML页面文件中时:
I am an & sign
我收到错误:
The entity name must immediately follow the '&' in the entity reference
解决此问题的一种方法似乎是改变'&'到&
,我认为只是写'&'而不合适。
对于我使用'&'的情况,似乎也是如此在Javascript中,我可以将Javascript包装在CDATA标签中;当用CDATA标签包装时,我可以写'&'无需将其作为&
转义,这是一个很好的解决方法,可以在我的页面上拥有更多可读的Javascript代码。
但是当我想使用文字“&amp;”时会发生什么页面上的其他位置不在<script>
标签内,因此不能轻易地将代码包装在CDATA标签中?我必须总是逃避'&amp;'这些案件的&
为?
注意尝试使用转义值的能力,似乎无法解决问题
答案 0 :(得分:13)
Facelets是一种基于XML的视图技术。当意图从字面上呈现它们时,XML解析器需要特殊处理的任何字符都需要进行XML转义。其中包括<
和&
。 <
表示XML标记的开头,如<foo>
,&
表示XML实体的开头,如&
。 <
必须转发为<
,&
转义为&
。
不在Facelets中转义它们会导致<
javax.faces.view.facelets.FaceletException:Error Parsing /test.xhtml:Error Traced [line:42]元素的内容必须由格式正确的字符数据或标记组成。
以及&
javax.faces.view.facelets.FaceletException:Error Parsing /test.xhtml:Error Traced [line:42]实体名称必须紧跟'&amp;'在实体参考中。
这与JavaScript没有特别关系,这适用于整个视图,包括“纯文本”。这些角色恰好也是JavaScript运营商。没有办法绕过这个,这就是XML的指定方式。在JavaScript中,还有一种方法可以避免转义或使用CDATA块:只需将JS代码放在由.js
或<script>
加载的<h:outputScript>
文件中。
在EL中,还有&&
运算符也需要作为&&
进行转义,但幸运的是这个运算符的别名是and
运算符。
答案 1 :(得分:1)
这是因为&amp;是XML中的特殊字符:http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
答案 2 :(得分:1)
仅供参考,我尝试在我的JSF页面中编写(c)字符。 我编写&amp; copy时出现了错误:“引用了copy但未声明” 当我写&amp; copy;我收回了原始字符串。
我可以使用unicode符号显示特殊字符:©
答案 3 :(得分:-1)
此代码对我有用:
appc ti info -t ios