如何在模板中按各自的错误代码显示多个全局错误?
拒绝绑定结果时,第一个参数是
error code
。在模板中显示错误时如何使用它?
用例:我在控制器中使用自定义验证规则(例如重复检查),并且我想在表单中的不同位置显示全局错误。
例如:
public String myPage(..., BindingResult result) {
result.reject("errorCode1", "Error 1 happened");
result.reject("errorCode2", "Error 2 happened");
return "my-view"
}
在我的 Thymeleaf 模板中,我可以一次显示所有错误:
<form th:object="${myForm}" method="post">
<p th:if="${#fields.hasGlobalErrors()}" th:errors="*{global}"></p>
</form>
但是我怎样才能打印仅带有错误代码的错误
errorCode1
?
我认为没有办法做到这一点。我建议您在对象 (myForm) 中创建另一个字段,并在 BindingResult 中使用rejectValue 分配错误。然后您可以验证模板上的错误:
public String myPage(..., BindingResult result) {
result.reject("errorCode1", "Global Error Happened");
result.rejectValue("newField", "Error 2 happened");
return "my-view"
}
<form th:object="${myForm}" method="post">
<p th:if="${#fields.hasGlobalErrors()}" th:errors="*{global}"></p>
<p th:if="${#fields.hasErrors('newField')}" th:errors="*{newField}"></p>
</form>
希望这有帮助!
我花了一点时间才弄清楚,但它的工作原理是这样的:
public String myPage(..., BindingResult result) {
result.reject("errorCode1", "errorCode1");
result.reject("errorCode2", "errorCode2");
return "my-view"
}
重要提示:
errorCode1
不能是消息源的键!
<form th:object="${myForm}" method="post">
<p th:if="${#lists.contains(#fields.globalErrors(), "errorCode1d")}" th:text="Error 1 happened"></p>
</form>
重要提示: 使用
"
来指示字符串。
th:text
可能包含消息键,例如 th:text="#{error.code1}"
使用 globalDetailedErrors()
public String myPage(..., BindingResult result) {
result.reject("code1", "message");
return "my-view"
}
和
<div th:if="${#fields.hasGlobalErrors()}">
<div th:each="err : ${#fields.globalDetailedErrors()}">
<div th:if="${err.getCode() == 'code1'}" th:text="${err.getMessage()}"</div>
</div>
</div>