我在 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。:我不想为我的消息使用消息包。
答案 0 :(得分:1)
如果Java源文件本身未由编辑器使用UTF-8保存和/或编译器未使用UTF-8读取,则会发生这种情况。答案取决于使用的工具。归结为重新配置工具以使用UTF-8。
对于Eclipse,您需要确保工作区文本文件编码设置为UTF-8,如this screenshot(source)所示。这将使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'}