为什么&符号(&)需要在JSF中编码?有没有解决的办法?

时间:2012-06-18 16:05:35

标签: jsf-2

我经常在我的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;'这些案件的&amp;为?

注意尝试使用转义值的能力,似乎无法解决问题

4 个答案:

答案 0 :(得分:13)

Facelets是一种基于XML的视图技术。当意图从字面上呈现它们时,XML解析器需要特殊处理的任何字符都需要进行XML转义。其中包括<&<表示XML标记的开头,如<foo>&表示XML实体的开头,如&#38;<必须转发为&lt;&转义为&amp;

不在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中,还有&&运算符也需要作为&amp;&amp;进行转义,但幸运的是这个运算符的别名是and运算符。

另见:

答案 1 :(得分:1)

答案 2 :(得分:1)

仅供参考,我尝试在我的JSF页面中编写(c)字符。 我编写&amp; copy时出现了错误:“引用了copy但未声明” 当我写&amp; copy;我收回了原始字符串。

我可以使用unicode符号显示特殊字符:©

答案 3 :(得分:-1)

此代码对我有用:

appc ti info -t ios