【问题标题】:Not all of the Form validation errors shown in JSP并非 JSP 中显示的所有表单验证错误
【发布时间】:2023-03-29 18:38:01
【问题描述】:

我有以下验证代码

@RequestMapping(value = "/itemValidation.json", method = RequestMethod.POST)
    @ResponseBody
    public ValidationResponse ajaxValidation(
            @ModelAttribute(value = formName) @Valid Item item,
            BindingResult result) {
        ValidationResponse res = new ValidationResponse();
        if (!result.hasErrors()) {
            res.setStatus("SUCCESS");
        } else {
            res.setStatus("FAIL");
            List<FieldError> allErrors = result.getFieldErrors();
            List<ErrorMessage> errorMesages = new ArrayList<ErrorMessage>();
            for (FieldError objectError : allErrors) {
                errorMesages.add(new ErrorMessage(objectError.getField(),
                        objectError.getDefaultMessage()));
            }
            res.setErrorMessageList(errorMesages);
        }
        return res;
    }

验证后有三个元素不满足如下所示的约束:

问题出在 JSP 上,只显示了最后两个错误。 fieldName 的错误:itemPK.name 未显示。

我使用下面的代码来显示错误:

<span class="help-inline"><form:errors path="${name}" /></span>

我按顺序生成的输入元素:

<input id="itemPK.name_id" name="itemPK.name" type="text" value="">
<input id="price_id" name="price" type="number" value="">
<input id="point_id" name="point" type="number" value="">

不知道哪里出了问题,希望有人能对此有所了解。

【问题讨论】:

    标签: java json jsp spring-mvc


    【解决方案1】:

    我发现了问题所在。还有另一层,ajax 响应方法假设将所有错误消息附加到适当的字段。由于 jQuery 选择器无法找到名称为 itemPK.name 的元素,第一个错误从未显示,修复方法是将其更改为 itemPK\\.name

    【讨论】:

      【解决方案2】:

      如果您说显示最后 2 个字段错误,那么您可能是第一个字段的名称错误。使用

      <form:input path="name" /><span class="help-inline"><form:errors path="name" /></span> 
      

      或使用路径值itemPK.name 反映到调试窗口中的字段名称。

      【讨论】:

      • 路径名一直指向itemPK.name。将其更改为 name 并不能解决任何问题,因为它在 modelAttribute 中是不存在的属性。
      猜你喜欢
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2012-06-05
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      相关资源
      最近更新 更多