Java源文件中的重音字符无法在JSF页面中正确显示

时间:2016-07-18 12:24:01

标签: java jsf character-encoding bean-validation

我在 JSF 应用程序中有一个带有此属性的 CDI bean:

@NotNull(message = "Senha não informada.")
public String getSenha()
{
    return _senha;
}

问题是当验证失败时,页面上显示的消息是:

Senhanão informada。

问题不在于 JSF ,而在于 Bean Validation ,因为如果我将消息放在标准 JSF 验证器中并使用它而不是bean验证注释,消息使用正确的重音字符正确显示。

我尝试将请求和响应编码更改为过滤器中的 UTF-8 以查看问题是否已修复,但问题仍然存在。

当然,如果我将注释消息更改为此 Senha n \ u00e3o informada。,我会在页面上收到正确的消息,但我不希望这样。我想要一种方法来指示bean验证API(或其他东西)使用我自己语言中的重音字符。

我正在使用 Wildfly 10 和所有默认库。

P.S。:我不想为我的消息使用消息包。

1 个答案:

答案 0 :(得分:1)

如果Java源文件本身未由编辑器使用UTF-8保存和/或编译器未使用UTF-8读取,则会发生这种情况。答案取决于使用的工具。归结为重新配置工具以使用UTF-8。

对于Eclipse,您需要确保工作区文本文件编码设置为UTF-8,如this screenshotsource)所示。这将使Eclipse使用UTF-8保存Java源文件,使用UTF-8构建项目,并在输出控制台中使用UTF-8。

如果您使用Maven构建项目,则需要将以下条目添加到pom.xml。报告输出编码不是解决您的具体问题所必需的,但它很方便。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

如果您使用Gradle构建项目,可以使用以下配置解决,正如您对问题的评论中所确认的那样。

tasks.withType(JavaCompile) {options.encoding = 'UTF-8'}