我有以下验证代码
@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;
}
经验证,有3个元素不满足约束条件,如下所示:
问题在于 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="">
不知道出了什么问题,希望有人能对此有所了解。
如果您说显示最后 2 个字段错误,那么您可能第一个字段的名称错误。使用
<form:input path="name" /><span class="help-inline"><form:errors path="name" /></span>
或使用反映到调试窗口中的字段名称的路径值
itemPK.name
。
我发现问题所在了。还有另一层,ajax 响应方法应该将所有错误消息附加到适当的字段。由于 jQuery 选择器无法找到名称为
itemPK.name
的元素,第一个错误从未显示,解决方法是将其更改为 itemPK\\.name
。