如何在JSF XHTML中指定UTF-8字符?

3
在Java中,使用UTF-8字符在String中非常容易,只需指定"\u2022"即可。据我所知,在JSF表达式语言中指定的字符串是Java字符串,例如#{'some string'}(其中使用''来界定字符串,因为""已用于界定XHTML属性值)。
那么,我如何在JSF XHTML中指定上述字符串"\u2022",例如在h:outputLabelvalue中?
<h:outputLabel value="#{'\u2022'}"/>

由于/index.xhtml @9,45 value="#{'\u2022'}" Error Parsing: #{'\u2022'},此次操作失败。

<h:outputLabel value="\u2022"/>

结果会在 XHTML 中产生 u2022

寻找信息很困难,因为网页编码非常重要,搜索结果主要是对它的解释。

在后端 bean 中引用 String 属性以及使用资源包都是有效的解决方法。


http://balusc.omnifaces.org/2009/05/unicode-how-to-get-characters-right.html - Kukeltje
@Kukeltje 感谢您的建议。我尝试了但没有成功(已编辑)。Balusc博客的链接很有价值,但主要涵盖编码问题,而这不是主要问题(更多是语法问题),您是否有博客文章中的特定段落? - Kalle Richter
也许我没有完全理解您想要实现的目标(参考其他答案)。您关于 ' 的评论有些令人困惑。 - Kukeltje
@Kukeltje 在Java中,您可以将UTF-8字符指定为Stringchar(分别用""''界定)。在JSF中,我无法声明一个char,因为''用于界定字符串,因为""已用于界定XHTML属性,因此在已用""界定的属性中使用""会导致不必要的编译器挑战,并使代码比必要的更难读。我只是想避免解释和回答。我会删除它。 - Kalle Richter
@Kukeltje 我想知道在XHTML中声明UTF-8字符(例如2022)的语法,或者为什么这不可能。 - Kalle Richter
在BalusC博客中,他谈到文件是如何本地保存的,例如在您的IDE中。检查这些内容。我没有看到任何其他原因,导致我第一条评论中的东西不起作用(或者给你体验到的不是另一个奇怪的字符)。 - Kukeltje
2个回答

3

通常JSF的value属性指向一个后端bean对象,该对象通常返回一个字符串。该字符串支持HTML UTF-8转义,例如&#xAAAA;,其中AAAA是Unicode字符的十六进制代码。

因此,只需简单地编写:

<h:outputLabel value="&#x2022;" />

您可以在表达式语言字面值中编写此转义序列:

<h:outputLabel value="#{'&#x2022;'}" />

-1

XHTML是一种XML标记语言,因此可以接受转义为XML实体:

<h:outputText value="&quot;User&quot;" />

将会打印

"User"

参考资料:https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML

您还可以使用资源包,它将为您提供多语言支持和Unicode编码。然后您可以使用:

<h:outputText  value="#{msg.user}"/>

而在 messages.properties 文件中:

user=\u2022User\u2022

请参考BalusC的回答:JSF中的国际化,何时使用message-bundle和resource-bundle?


感谢您的输入。然而,我并不明白XML转义与我的问题有何关联,请解释一下。在资源包中指定字符似乎比在后备Bean中指定字符文字更复杂,这是另一种解决方法。 - Kalle Richter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接