我在JSF应用程序中有一个CDIbean,具有以下属性:
@NotNull(message = "Senha não informada.")
public String getSenha()
{
return _senha;
}
问题是,当验证失败时,页面上显示的消息是:
信息
问题不在于JSF,而在于Bean Validation。因为如果我将消息放在标准的JSF验证器中,并使用它来代替Bean Validation注释,那么消息将正确显示,并带有正确的重音字符。
我尝试在过滤器中将请求和响应编码更改为UTF-8,以查看问题是否已解决,但问题仍然存在。
当然,如果我将注释消息更改为此Senha n\u00e3o信息我在页面上得到了正确的信息,但我不想要这个。我想要一种方法来指示bean验证API(或其他东西)在我自己的语言中使用重音字符。
我在所有默认库中使用Wildfly 10。
附言:我不想在我的消息中使用消息包。
如果编辑器未使用UTF-8保存Java源文件本身和/或编译器未使用UTF-8读取Java源文件,就会发生这种情况。答案取决于使用的工具。归根结底,就是将工具重新配置为使用UTF-8。
在Eclipse的情况下,您需要确保工作区文本文件编码设置为UTF-8,如此屏幕截图(源代码)所示。这将使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'}