如何手动控制 fields.hasErrors() 和 bindingResult

发布于 2025-01-15 04:37:27 字数 2738 浏览 0 评论 0 原文

我正在尝试检查是否有包含项目的List。所以我在我的 HTML 中使用这段代码:

<div class="form-group-petit row">
    <div class="col-sm-12">
        <table class="table center" id="tableSelectedEstudis">
            <col style="width:80%">
            <col style="width:20%">
            <!-- <col style="width:10%"> -->
            <thead>
                <tr>
                    <th scope="col" data-th-text="#{edicio.estudis}"></th>
                    <th scope="col" data-th-text="#{edicio.estudis.vigent}">Vigent</th>
                    <!--  <th scope="col" data-th-text="#{label.accions}">Accions</th> -->
                </tr>
            </thead>
            <tbody>
                <tr th:each="estudi : *{listEstudis}">
                    <td scope="row" th:text="${estudi.codiEstudi + ' - ' + estudi.memo}" />
                    <td scope="row" th:text="${estudi.vigentSN}" />
                    <!--
                    <td>
                        <span class="link" id="eliminarEstudi" title="Elimina estudi" 
                              th:attr="data-codiestudi=${estudi.codiEstudi}" 
                              th:unless="*{altaOk} OR *{altaKo}">
                            <i class="oi oi-delete"></i>
                        </span>
                    </td>
                    -->
                </tr>
                <tr></tr>
            </tbody>
        </table>
    </div>
</div>
<label class="error col-sm-10" 
       th:if="${#fields.hasErrors('listEstudis')}" 
       th:errors="*{listEstudis}"></label>

通常我应该在表单中添加 @NotEmpty 标签,让 Spring 自动工作。就我而言,我不能这样做,我需要手动添加错误。所以我在我的控制器中执行此操作:

String[] codes = { 
        "NotEmpty.admEdicionsDetallForm.listEstudis", 
        "NotEmpty.listEstudis", 
        "NotEmpty.java.util.List", 
        "NotEmpty" };
String objectName = "admEdicionsDetallForm";
Object[] objects = {
        new DefaultMessageSourceResolvable(
                new String[]{"admEdicionsDetallForm.listEstudis", "listEstudis" }, 
                null, 
                "listEstudis")};
if (llistatEstudis.isEmpty()) {
    bindingResult.addError(
            new ObjectError(
                    objectName, 
                    codes, 
                    objects, 
                    "És obligatori seleccionar almenys un estudi"));
}

但是当我尝试手动执行此操作时,该消息没有显示,但是如果我使用 @NotEmpty 标签执行此操作,则它可以工作。

I'm trying to check if I have a List with items. So I use this code in my HTML:

<div class="form-group-petit row">
    <div class="col-sm-12">
        <table class="table center" id="tableSelectedEstudis">
            <col style="width:80%">
            <col style="width:20%">
            <!-- <col style="width:10%"> -->
            <thead>
                <tr>
                    <th scope="col" data-th-text="#{edicio.estudis}"></th>
                    <th scope="col" data-th-text="#{edicio.estudis.vigent}">Vigent</th>
                    <!--  <th scope="col" data-th-text="#{label.accions}">Accions</th> -->
                </tr>
            </thead>
            <tbody>
                <tr th:each="estudi : *{listEstudis}">
                    <td scope="row" th:text="${estudi.codiEstudi + ' - ' + estudi.memo}" />
                    <td scope="row" th:text="${estudi.vigentSN}" />
                    <!--
                    <td>
                        <span class="link" id="eliminarEstudi" title="Elimina estudi" 
                              th:attr="data-codiestudi=${estudi.codiEstudi}" 
                              th:unless="*{altaOk} OR *{altaKo}">
                            <i class="oi oi-delete"></i>
                        </span>
                    </td>
                    -->
                </tr>
                <tr></tr>
            </tbody>
        </table>
    </div>
</div>
<label class="error col-sm-10" 
       th:if="${#fields.hasErrors('listEstudis')}" 
       th:errors="*{listEstudis}"></label>

Normally I should add @NotEmpty label in the form and let Spring work automatically. In my case, I can't do it this way and I need to add the error manually. So I do this in my controller:

String[] codes = { 
        "NotEmpty.admEdicionsDetallForm.listEstudis", 
        "NotEmpty.listEstudis", 
        "NotEmpty.java.util.List", 
        "NotEmpty" };
String objectName = "admEdicionsDetallForm";
Object[] objects = {
        new DefaultMessageSourceResolvable(
                new String[]{"admEdicionsDetallForm.listEstudis", "listEstudis" }, 
                null, 
                "listEstudis")};
if (llistatEstudis.isEmpty()) {
    bindingResult.addError(
            new ObjectError(
                    objectName, 
                    codes, 
                    objects, 
                    "És obligatori seleccionar almenys un estudi"));
}

But the message is not showing when I try to do it manually, however if I do it with the @NotEmpty label it works.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

诺曦 2025-01-22 04:37:27

rejectValue()方法用于向BindingResult 对象。 https://stackoverflow.com/a/65759773/2039546

因此,在您的代码中,不要:

bindingResult.addError(
        new ObjectError(
                objectName, codes, objects, 
                "És obligatori seleccionar almenys un estudi"));

尝试使用:

bindingResult.rejectValue(
        "listEstudis", 
        "error.listEstudis",
        "És obligatori seleccionar almenys un estudi!");

The rejectValue() method is used to add a validation error to the BindingResult object. https://stackoverflow.com/a/65759773/2039546

So, in your code, instead of:

bindingResult.addError(
        new ObjectError(
                objectName, codes, objects, 
                "És obligatori seleccionar almenys un estudi"));

Try with:

bindingResult.rejectValue(
        "listEstudis", 
        "error.listEstudis",
        "És obligatori seleccionar almenys un estudi!");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文