【问题标题】:How to specify a UTF-8 character in JSF XHTML?如何在 JSF XHTML 中指定 UTF-8 字符?
【发布时间】:2018-08-01 15:41:54
【问题描述】:

在 Java 中,在 String 中使用 UTF-8 字符就像指定 "\u2022" 一样简单。在 JSF 表达式语言中指定的 Afaik 字符串是 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"/>

导致u2022 在 XHTML 中生成。

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

在支持 bean 中引用 String 属性是一种有效的解决方法以及使用资源包。

【问题讨论】:

  • @Kukeltje 感谢您的意见。我尝试不成功(已编辑)。 balusc 博客的链接很有价值,但主要涉及编码问题,这不是这里的主要问题(更多的是语法问题),您在博客文章中有特定的段落吗?
  • 也许我错过了你真正想要实现的目标(查看其他答案)。您对 ' 的评论有些令人困惑
  • @Kukeltje 在 Java 中,您可以将 UTF-8 字符指定为 Stringchar(分别以 ""'' 分隔)。在 JSF 中,我不能声明 char,因为 '' 用于分隔字符串,因为 "" 已用于分隔 XHTML 属性,因此在已用 "" 分隔的属性内使用 "" 会导致不必要的编译器挑战并使代码比必要的更难阅读。我只是想避免 cmets 和解释这一点的答案。我会删除它。
  • @Kukeltje 我想知道声明 UTF-8 字符的语法,例如2022,在 XHTML 中或解释为什么这是不可能的。

标签: string jsf utf-8


【解决方案1】:

通常的 JSF 值属性是指一个支持 bean 对象,它通常提供一个String。此字符串支持 HTML UTF-8 转义,如 &amp;#xAAAA; 其中AAAA 是 unicode 字符的十六进制代码。

所以,简单地写这个:

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

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

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

【讨论】:

    【解决方案2】:

    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 答案:Internationalization in JSF, when to use message-bundle and resource-bundle?

    【讨论】:

    • 感谢您的意见。但是我看不到 XML 转义与我的问题有何关系,请解释一下。在资源包中指定字符似乎比在支持 bean 中指定为文字更复杂。这是另一种解决方法。
    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2012-03-06
    • 2016-04-24
    • 2011-06-14
    相关资源
    最近更新 更多