Spring Form中的类级别验证

时间:2017-01-31 22:07:38

标签: java spring forms validation spring-mvc

我是Spring的新手,正在尝试使用国际化验证消息制作验证表单。 我正在使用JSR @Valid注释进行登录表单验证。

我想执行以下3次验证:

  1. 检查用户名是否为空
  2. 检查密码是否为空。
  3. 检查密码是否对用户名有效。
  4. 我能够执行所有这些验证,但问题是在我的UI上,我获得第3次验证以及第1次和第2次验证。

    我想仅在第1次和第2次验证通过时显示第3次验证。

    以下是我的jsp代码:     

                    <label for="username"> <spring:message code="label.email" />                        </label>
                    <form:input path="username" id="username" />
                    <form:errors path="username" style="color: red" />
                    <br />
                    <br />
                    <label for="password"> <spring:message
                            code="label.password" /></label>
                    <form:input path="password" id="password" />
                    <form:errors path="password" style="color: red" />
                    <br />
                    <form:errors path="authenticated" style="color: red" />
    

    我的控制器代码:

    @RequestMapping(value = "/login", method = {RequestMethod.POST, RequestMethod.GET})
    public String authenticate(@ModelAttribute("user") @Valid User user,BindingResult result, ModelMap model, Locale locale, SessionStatus status, RedirectAttributes redirectAttrs, HttpServletRequest req){       
    
        if(result.hasErrors()){
            return "home";
        }
    
    //code to validate password against username
    }
    

    我的Bean代码

    public class User implements Serializable {
    
    private static final long serialVersionUID = -7788619177798333712L;
    
    @NotEmpty(message = "Please enter your username.")
    private String username;
    
    @NotEmpty(message = "Please enter your password.")
    private String password;
    
    @AssertTrue(message= "Invalid username or password")
    boolean authenticated;
    

    如果有人能指导我解决这个问题,那将是一个很大的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用类leven约束而不是单独的字段进行验证。

请参阅Cross field validation with Hibernate Validator (JSR 303)How can I validate two or more fields in combination?

只需引入自己的注释来检查实现Constraint或ConstraintValidator接口的验证器类中的字段组合。

然后将注释添加到表单类。