6

我想在组件的值属性中使用破折号h:link

这是我的尝试(目前不工作):

<h:link value="#{somethingHere} &mdash; #{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) 表达式中做到这一点?这样做的正确方法是什么?

4

1 回答 1

11

Facelets 是基于 XML 的,由 XML 解析器处理。这&mdash;是一个 HTML 实体,在 XML 中无法识别。在 XML 中只能识别此 Wikipedia 页面中列出的五个、&quot;&amp;&apos;和。&lt;&gt;

Facelets/XML 默认已经使用 UTF-8,而 HTML 实体基本上是 UTF-8 前时代的遗留物,在 UTF-8 文档中不是必需的,因此您可以将实际字符纯/未编码放在模板中(提供编辑器能够将文件保存为 UTF-8)。

换句话说,只需调整

<h:link value="#{somethingHere} &mdash; #{anotherHere}">

<h:link value="#{somethingHere} — #{anotherHere}">

如果由于某种原因这不是一个选项,那么您可以改用 format 中的数字字符引用&#nnnn;,就像在 XML&#160;中表示 a一样。&nbsp;您可以在 fileformat.info 中找到数字字符参考:Unicode Character 'EM DASH' (U+2014)

编码

HTML 实体(十进制)&#8212;

所以,这应该为你做:

<h:link value="#{somethingHere} &#8212; #{anotherHere}">

另一种应该更满足确切错误消息的替代方法是在文档类型中自己显式声明实体引用。

<!DOCTYPE html [
    <!ENTITY mdash "&#8212;"> 
]>

But this isn't the general recommendation/approach as you'd need to repeat this over every single XML file wherein the character is been used.

于 2012-08-16T17:51:22.243 回答