Thymeleaf と一緒に Spring MVC を使用します。次のようなThymeleaffields.hasErrors
に問題があります。
Bean Validation 制約エラー (@NotNull 制約など) が発生した場合、次の使用法は完全fields.hasErrors
に機能します。
<span class="help-inline" th:if="${#fields.hasErrors('member.email')}" th:text="#{message_form.validation.email}"></span>
メール欄横にOKというエラーメッセージが表示されます。
ただし、「アプリケーション固有の」エラー( Bean Validation constraint errorとは対照的に) がコードによって発生した場合 (以下のコントローラーのコードを参照)、
// 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')}"
trueと評価されず、エラー メッセージは表示されません....
これらの「アプリケーション固有の」エラーを表示する唯一の方法は、フォームの下に次を含めることです。
<div id="errors" class="alert alert-error">
<ul th:if="${#fields.hasErrors('*')}">
<li th:each="err : ${#fields.errors('*')}" th:text="${err}"></li>
</ul>
</div>
すると、リスト項目として「使用済みのメール」が表示されます。
の動作を明確にし、特に「アプリケーション固有の」エラーの場合に false と評価されるth:if="${#fields.hasErrors('member.email')}"
理由を教えてください。