Java 无法在属性文件中显示验证错误消息
我正在尝试在属性文件中定义验证错误消息。Java 无法在属性文件中显示验证错误消息,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在尝试在属性文件中定义验证错误消息。 但是我得到了Bean验证的默认消息。 该项目的构建工具是gradle,属性文件位于src/main/resources目录的根目录中 我试过的 确保我的区域设置为“ja” 将“NotBlank=”更改为“NotBlank.javax.validation.constraints=” 控制台记录字段错误消息 属性文件的源代码和内容 java实现WebMVCConfiguer application-messages_-ja.properties的一部分
但是我得到了Bean验证的默认消息。
该项目的构建工具是gradle,属性文件位于src/main/resources目录的根目录中 我试过的
- 确保我的区域设置为“ja”
- 将“NotBlank=”更改为“NotBlank.javax.validation.constraints=”
public String getErrMsg(BindingResult bindingResult) {
StringBuilder alertMsg = new StringBuilder("<p>入力エラー</p>");
alertMsg.append("<ul>\n");
for (int i = 0; i < bindingResult.getErrorCount(); i++) {
alertMsg.append("<li>" + bindingResult.getAllErrors().get(i).getDefaultMessage() + "</li>\n");
if (i == bindingResult.getErrorCount() - 1) {
alertMsg.append("</ul>");
}
}
return alertMsg.toString();
}
公共字符串getErrMsg(BindingResult BindingResult){
StringBuilder alertMsg=新的StringBuilder(“入力エラー ”;
alertMsg.append(“\n”);
对于(int i=0;i”+bindingResult.getAllErrors().get(i).getDefaultMessage()+”\n”);
如果(i==bindingResult.getErrorCount()-1){
alertMsg.append(“
”);
}
}
返回alertMsg.toString();
}
控制器将返回值传递给Thymeleaf模板。
模板包含此HTML
<span th:utext="${alertMsg}"></span>
感谢M.Deinum的评论,我成功地显示了预期的错误消息! 我更改了显示错误消息的方法。我改变了Thymeleaf模板如下
<ul class="errMsg" th:if="${#fields.hasErrors('*')}">
<li th:each="err : ${#fields.errors('*')}" th:text="${err}">Input is incorrect</li>
</ul>
输入不正确
感谢M.Deinum的评论,我成功地显示了预期的错误消息!
我更改了显示错误消息的方法。我改变了Thymeleaf模板如下
<ul class="errMsg" th:if="${#fields.hasErrors('*')}">
<li th:each="err : ${#fields.errors('*')}" th:text="${err}">Input is incorrect</li>
</ul>
输入不正确
您是如何执行测试的?我认为问题可能出在MessageSource
创建中。我建议通过调用该方法,手动检查它在创建之后是否正常工作来验证它。如果你知道问题就在那里,你可以把精力集中在那里。此外,对于区域设置代码,请尝试ja_JP
而不仅仅是ja
。此外,我认为classpath
中的资源将被永久缓存,因此messageSource.setCacheSeconds(5)
将不受尊重。@hellen0328:关于缓存,我只是说无论您设置什么,它都可能被忽略。这相当于将其设置为-1
。此外,您的文件名有一个输入错误,消息中有3个s。起初我认为这是问题中的一个输入错误,但请检查一下。您尝试/配置的东西太多了。删除验证器(默认配置并附加到MessageSource
),同时删除默认配置的RequestMappingHandlerMapping
。确保您的配置中也有@EnableWebMvc
(是否可以添加完整的WebMvcConfig
?)。问题在于您自己的代码。你不应该那样做。带有表单的Thymeleaf具有呈现消息的方法。你绕过了所有这些。你是如何进行测试的?我认为问题可能出在MessageSource
创建中。我建议通过调用该方法,手动检查它在创建之后是否正常工作来验证它。如果你知道问题就在那里,你可以把精力集中在那里。此外,对于区域设置代码,请尝试ja_JP
而不仅仅是ja
。此外,我认为classpath
中的资源将被永久缓存,因此messageSource.setCacheSeconds(5)
将不受尊重。@hellen0328:关于缓存,我只是说无论您设置什么,它都可能被忽略。这相当于将其设置为-1
。此外,您的文件名有一个输入错误,消息中有3个s。起初我认为这是问题中的一个输入错误,但请检查一下。您尝试/配置的东西太多了。删除验证器(默认配置并附加到MessageSource
),同时删除默认配置的RequestMappingHandlerMapping
。确保您的配置中也有@EnableWebMvc
(是否可以添加完整的WebMvcConfig
?)。问题在于您自己的代码。你不应该那样做。带有表单的Thymeleaf具有呈现消息的方法。你绕过了这一切。
<span th:utext="${alertMsg}"></span>
<ul class="errMsg" th:if="${#fields.hasErrors('*')}">
<li th:each="err : ${#fields.errors('*')}" th:text="${err}">Input is incorrect</li>
</ul>