2014-05-13 33 views
2

你好,这是我的控制器Spring MVC的 - @初始化粘合剂的方法不叫

@RequestMapping(value="/home", method = RequestMethod.POST) 
public String homeSubmit(@Valid LoginForm loginForm , BindingResult bindResult){ 

    if(bindResult.hasErrors() || bindResult.hasFieldErrors()){ 
     return "home"; 
    }else{ 
     return "Success"; 
    } 
} 

@InitBinder("loginForm") 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(new LoginFormValidator()); 
} 

以下是我的验证

public class LoginFormValidator implements Validator { 

    public boolean supports(Class<?> classz) { 
     return LoginForm.class.equals(classz); 
    } 

    public void validate(Object target, Errors arg1) { 
     System.out.println("inside validate method validator"); 
     LoginForm loginForm = (LoginForm) target; 
     if(! loginForm.getUserName().equalsIgnoreCase("xxx") ){ 
      arg1.rejectValue("userName","Invalid Data"); 
     } 
     if(! loginForm.getPassword().equalsIgnoreCase("yyy")){ 
      arg1.rejectValue("password","Invalid Data"); 
     } 
    } 
} 

问题是我的验证是不是所有得到called.evertime条件bindResult.hasErrors() || bindResult.hasFieldErrors()false。我也试过调试..它不是所有人都叫

+1

尝试增加'@ModelAttrubute(“登录表单”)''权@ Valid',让我知道发生了什么 – geoand

+0

绑定和验证是两回事:

@Autowired @Qualifier("loginFormValidator") private Validator validator; @RequestMapping(value="/home", method = RequestMethod.POST) public String homeSubmit(@Validated LoginForm loginForm , BindingResult bindResult){ if(bindResult.hasErrors() || bindResult.hasFieldErrors()){ return "home"; }else{ return "Success"; } } 

实例化验证为服务。如果绑定失败,则验证无效。 – zeroflagL

+0

是不是调用了'initBinder'方法,或者您的验证器未被调用?我怀疑第二个,而不是第一个,如果是的话,请修改问题的标题。 –

回答

2

这样做的一种方法是实例化Validator作为服务,并注入到您的控制器。在模型上注释@Validated。前

@Service("loginFormValidator") 
public class LoginFormValidator implements Validator { 

    public boolean supports(Class<?> classz) { 
     return LoginForm.class.equals(classz); 
    } 

    public void validate(Object target, Errors arg1) { 
     System.out.println("inside validate method validator"); 
     LoginForm loginForm = (LoginForm) target; 
     if(! loginForm.getUserName().equalsIgnoreCase("xxx") ){ 
      arg1.rejectValue("userName","Invalid Data"); 
     } 
     if(! loginForm.getPassword().equalsIgnoreCase("yyy")){ 
      arg1.rejectValue("password","Invalid Data"); 
     } 
    } 
}