我想在h:link
组件的值属性中使用em dash。
这是我的尝试(当前不起作用):
<h:link value="#{somethingHere} — #{anotherHere}">
<f:param name="identifier" value="#{somethingHere.identifier}" />
</h:link>
这会产生FaceletsException
:
FaceletException: Error Parsing /index.xhtml: Error Traced[line: 13]
The entity "mdash" was referenced, but not declared.
at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:394)
...
我知道我可以使用HTML锚点,但有没有办法在EL表达式中执行此操作?这样做的正确方法是什么?
答案 0 :(得分:8)
Facelets是基于XML的,由XML解析器处理。 —
是HTML实体,无法在XML中识别。只有this Wikipedia page,"
,&
,'
,<
和>
中列出的五个才能在XML中识别。
Facelets / XML默认使用UTF-8,因此你可以在模板中放置实际字符plain / unncoded(前提是编辑器能够将文件保存为UTF-8)。
<h:link value="#{somethingHere} — #{anotherHere}">
如果出于某种原因这不是一个选项,那么您可以使用&#nnnn;
格式的数字字符引用,就像使用 
来表示
一样在XML中。您可以在fileformat.info中找到数字字符引用:Unicode Character 'EM DASH' (U+2014)
编码
HTML实体(十进制)
—
所以,这应该适合你:
<h:link value="#{somethingHere} — #{anotherHere}">
另一个应该更准确地满足确切错误消息的替代方法是在doctype中明确地声明实体引用。
<!DOCTYPE html [
<!ENTITY mdash "—">
]>
但这不是一般性建议/方法,因为您需要在每个使用该字符的XML文件上重复此操作。