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

问题描述 投票:5回答:1

我想在em dash组件的value属性中使用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表达式中使用它呢?正确的方法是什么?

jsf-2 facelets
1个回答
8
投票

Facelets是基于XML的,并由XML解析器处理。 &mdash;是HTML实体,无法用XML识别。 [XML]仅识别this Wikipedia page&quot;&amp;&apos;&lt;&gt;中列出的五个。

Facelets / XML默认情况下已经使用UTF-8,因此您可以将实际字符以纯文本/未编码的形式放置在模板中(前提是编辑器能够将文件另存为UTF-8)。

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

如果由于某种原因而不选择此选项,则可以改用&#nnnn;格式的数字字符引用,就像使用&#160;表示XML中的&nbsp;一样。您可以在fileformat.info中找到数字字符引用:Unicode Character 'EM DASH' (U+2014)

编码

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

所以,这应该为您做:

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

另一种应更多满足确切错误消息的方法是,自己在doctype中声明实体引用。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.