我正在使用自定义Validator进行表单输入。我使用org.springframework.validation.ValidationUtils
单例拒绝必填字段条目,如果它们是空的:
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", null, "Username is mandatory");
打印这些错误消息适用于我的jsp:
<form:errors path="username"/>
但是,我想做一些更复杂的验证,例如RegEx的电子邮件输入或匹配两个密码条目:
errors.reject("verifypw", "Passwords don't match");
当两个输入的密码不匹配时,我想向Errors对象添加一个错误。 这按预期工作,我可以通过
检查控制器是否有错误public String submitRegisgrationForm(@ModelAttribute("user") PlatformUser user, BindingResult result) {
userService.validateUserInput(user, result);
if (!result.hasErrors()) {
userService.createNewUser(user);
return "user/success";
} else {
return "user/register";
}
}
唉,errors.reject()
引发的错误无法像通过rejectIfEmptyOrWhitespace()
提出的错误那样被访问。
<form:errors path="verifypw"/>
<label for="verifypw">Verify password: </label>
<form:password path="verifypw" id="verifypw"/>
这不会向jsp打印任何错误消息。
答案 0 :(得分:2)
使用时;
errors.reject("verifypw", "Passwords don't match");
您拒绝整个表单,错误代码为verifypw
,邮件为Passwords don't match
;你不是拒绝个别领域。因此,错误不会出现在带有;
<form:errors path="verifypw"/>
但如果你有;
<form:errors/>
你会看到它。要拒绝单个字段,请使用;
errors.rejectValue("verifypw", "Passwords don't match");