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

Bes*_*ces 12 jsf-2

我经常在我的JSF XHTML页面上有Javascript,其中包含&&,我最终必须编码为 &&

例如,当我将以下内容放在我的JSF XHTML页面文件中时:

I am an & sign
Run Code Online (Sandbox Code Playgroud)

我收到错误:

The entity name must immediately follow the '&' in the entity reference
Run Code Online (Sandbox Code Playgroud)

解决这个问题的一种方法似乎是将'&'更改为&我认为不喜欢写'''.

对于我在Javascript中使用'&'的情况,我也可以将Javascript包装在CDATA标签中; 当包装在CDATA标签中时,我可以编写'&'而不必将其转义为&,这是一个很好的解决方法,可以在我的页面上具有更可读的Javascript代码.

但是当我想在页面上的其他地方使用文字'&'而不在<script>标签内时会发生什么呢?因此不能轻易地将代码包装在CDATA标签中?对于这些案件,我必须总是逃避'&' &amp;吗?

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

Bal*_*usC 14

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]实体名称必须紧跟在实体引用中的'&'之后.

这与JavaScript没有特别关系,这适用于整个视图,包括"纯文本".这些角色恰好也是JavaScript运营商.没有办法绕过这个,这就是XML的指定方式.在JavaScript中,还有一种方法可以避免转义或使用CDATA块:只需将JS代码放在自己的.js文件中,然后加载<script><h:outputScript>.

在EL中,还有一个&&操作员也需要进行转义&amp;&amp;,但幸运的是这个操作员,and运营商有一个别名.

也可以看看: