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
。我也试过调试..它不是所有人都叫
尝试增加'@ModelAttrubute(“登录表单”)''权@ Valid',让我知道发生了什么 – geoand
绑定和验证是两回事:
实例化验证为服务。如果绑定失败,则验证无效。 – zeroflagL
是不是调用了'initBinder'方法,或者您的验证器未被调用?我怀疑第二个,而不是第一个,如果是的话,请修改问题的标题。 –