Thymeleaf:通过错误代码显示全局错误

问题描述 投票:0回答:3

如何在模板中按各自的错误代码显示多个全局错误?

拒绝绑定结果时,第一个参数是

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

java spring spring-boot spring-mvc thymeleaf
3个回答
1
投票

我认为没有办法做到这一点。我建议您在对象 (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>

希望这有帮助!


0
投票

我花了一点时间才弄清楚,但它的工作原理是这样的:

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(), &quot;errorCode1d&quot;)}" th:text="Error 1 happened"></p>
</form>

重要提示: 使用

&quot;
来指示字符串。
th:text
可能包含消息键,例如
th:text="#{error.code1}"


0
投票

使用 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>
© www.soinside.com 2019 - 2024. All rights reserved.