我将 Spring MVC 与 Thymeleaf 结合使用。我对 Thymeleaf fields.hasErrors
有一个问题,如下所示:
当出现Bean Validation 约束 错误时(例如@NotNull 约束),以下fields.hasErrors
的使用非常有效:
<span class="help-inline" th:if="${#fields.hasErrors('member.email')}" th:text="#{message_form.validation.email}"></span>
错误消息显示在电子邮件字段旁边。
但是,当我的代码(参见下面来自 Controller 的代码)引发“特定于应用程序的”错误(与Bean 验证约束错误相反)时,
// FROM SPRING MVC CONTROLLER
if (!registrationService.isEmailAvailable(registrationInfo.getMember().getEmail())) {
bindingResult.addError(new ObjectError("member.email", "email already used")); // TODO i18n
}
th:if="${#fields.hasErrors('member.email')}"
计算结果不为真,并且不显示任何错误消息。 ...
我发现显示那些“特定于应用程序”错误的唯一方法是在表单下方包含以下内容:
<div id="errors" class="alert alert-error">
<ul th:if="${#fields.hasErrors('*')}">
<li th:each="err : ${#fields.errors('*')}" th:text="${err}"></li>
</ul>
</div>
然后,它会显示“email already used”作为列表项。
任何人都可以澄清 th:if="${#fields.hasErrors('member.email')}"
的行为,特别是告诉我为什么它会评估为 false 在“特定于应用程序”错误的情况下?
最佳答案
我找到了问题的解决方案:我的问题来自 Spring API 的不正确使用。
我应该使用 FieldError
而不是 ObjectError
。
所以改变自:
//FROM SPRING MVC CONTROLLER
if (!registrationService.isEmailAvailable(registrationInfo.getMember().getEmail())) {
bindingResult.addError(new ObjectError("member.email", "email already used"));//TODO i18n
}
到
//FROM SPRING MVC CONTROLLER
if (!registrationService.isEmailAvailable(registrationInfo.getMember().getEmail())) {
bindingResult.addError(new FieldError("registrationInfo","member.email", "email already used"));//TODO i18n
}
解决了问题。
关于spring-mvc - 使用 Thymeleaf 的 "application-specific"在 Web UI 中显示 "fields.hasErrors"验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12259635/