有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java显示组织上设置的错误。springframework。验证。jsp中的错误对象

我正在为表单输入使用自定义验证器。如果必填字段项为空,我使用org.springframework.validation.ValidationUtils单例拒绝它们:

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", null, "Username is mandatory");

打印这些错误消息在我的jsp中有效:

<form:errors path="username"/>

但是,我想做一些更“复杂”的验证,例如注册电子邮件输入或匹配两个密码条目:

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) 个答案

  1. # 1 楼答案

    当你使用时

    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");