【问题标题】:How to set JSF message encoding to UTF-8?如何将 JSF 消息编码设置为 UTF-8?
【发布时间】:2011-11-06 22:22:46
【问题描述】:

我有以下代码用于一些用户输入验证

<h:form>
    <h:inputText value="#{user.input}">
        <f:validator validatorId="validator.InputValidator" />
    </h:inputText>
    <h:commandButton action="someaction" value="submit">
    </h:commandButton>
    <h:messages layout="table"></h:messages>
</h:form>

它工作正常,但如果用户输入无效,我需要显示一些 UTF-8 消息,
我该怎么做?

【问题讨论】:

    标签: java jsf utf-8 character-encoding


    【解决方案1】:

    我假设您当前的问题是 ISO-8859-1 范围之外的字符显示为mojibake。这是真的?我想不出另一个理由来问这个微不足道的问题。是的?然后继续阅读:

    首先,如果您仍在使用旧的 JSP 而不是其后续 Facelets,那么您需要将页面编码设置为 UTF-8。把它放在每个 JSP 的顶部:

    <%@page pageEncoding="UTF-8" %>
    

    或者在web.xml中全局配置:

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>
    

    如果您使用 Facelets,则无需执行任何操作。它默认使用 UTF-8 作为响应编码。

    其次,如果您从.properties 文件中获取消息,那么您需要了解这些文件默认情况下是使用 ISO-8859-1 读取的。另见java.util.Properties javadoc

    .. 输入/输出流以 ISO 8859-1 字符编码进行编码。不能直接用这种编码表示的字符可以使用 Unicode 转义来编写;转义序列中只允许使用单个 'u' 字符。 native2ascii 工具可用于将属性文件与其他字符编码进行转换。

    因此,您需要将 ISO-8859-1 范围之外的字符写入Unicode escape sequences。例如。而不是

    some.dutch.text = Één van de wijken van Curaçao heet Saliña.
    

    你需要写

    some.dutch.text = \u00c9\u00e9n van de wijken van Cura\u00e7ao heet Sali\u00f1a.
    

    这可以通过使用native2ascii 工具自动完成。

    作为一个完全不同的替代方案,您可以为 JSF 提供一个自定义的 ResourceBundle 实现和一个自定义的 Control,它使用 UTF-8 读取文件。这在this answerthis blog 中有更详细的扩展。这仅在您自己提供验证消息时才有效,例如 requiredMessage 而不是覆盖 JSF 默认验证消息。除此之外(即你需要它用于&lt;message-bundle&gt; 文件),那么你真的需要使用native2ascii 工具。

    另见:

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 2018-02-17
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2012-02-01
      • 2011-06-30
      相关资源
      最近更新 更多