gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:07:54 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com