spring-mvc - 使用 Thymeleaf 的 "application-specific"在 Web UI 中显示 "fields.hasErrors"验证错误

标签 spring-mvc bean-validation thymeleaf

我将 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/

相关文章:

java - 如何确定要使用哪个 spring 上下文?

java - 单选按钮选择及其在spring mvc中的值

java - 如何在 Postman 中上传文件和 JSON 数据?

spring-boot - 当 Spring Boot 应用程序启动时,JSR-303 注释不会验证 bean 属性

java - Thymeleaf + Spring Boot : Error Page

java - Spring boot 2.0.3 thymeleaf 渲染某些页面时出错

java - AJAX POST 到 Spring Controller 中的空参数

javax.validation.NotBlank 缺少 validator

hibernate - 集合没有被flush()处理

java - Spring - Thymeleaf - 404 错误