在jsp中显示org.springframework.validification.Errors对象上设置的错误

时间:2011-06-21 13:03:06

标签: java spring jsp java-ee

我正在使用自定义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打印任何错误消息。

1 个答案:

答案 0 :(得分:2)

使用时;

errors.reject("verifypw", "Passwords don't match");

您拒绝整个表单,错误代码为verifypw,邮件为Passwords don't match;你不是拒绝个别领域。因此,错误不会出现在带有;

的JSP中
<form:errors path="verifypw"/>

但如果你有;

<form:errors/>

你会看到它。要拒绝单个字段,请使用;

errors.rejectValue("verifypw", "Passwords don't match");