如何在 JSF 中使用 EL 内的 HTML 字符实体?

2024-04-27

我想使用em dash http://en.wikipedia.org/wiki/Dash在一个值属性中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 锚点,但是有没有办法在表达语言 https://en.wikipedia.org/wiki/Unified_Expression_Language#History(EL) 表达式?这样做的正确方法是什么?


Facelets 基于 XML 并由 XML 解析器处理。这&mdash;是 HTML 实体,在 XML 中无法识别。仅列出了五个这个维基百科页面 http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML, &quot;, &amp;, &apos;, &lt; and &gt;,在 XML 中被识别。

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

换句话说,只需调整

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

to

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

如果由于某种原因这不是一个选项,那么您可以使用以下格式的数字字符引用&#nnnn;,就像人们会使用的那样&#160;代表一个&nbsp;在 XML 中。您可以在 fileformat.info 中找到数字字符参考:Unicode字符集 'EM DASH' (U+2014) http://www.fileformat.info/info/unicode/char/2014/index.htm

编码

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

所以,这应该适合你:

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

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

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

但这不是一般建议/方法,因为您需要对使用该字符的每个 XML 文件重复此操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JSF 中使用 EL 内的 HTML 字符实体? 的相关文章