2012-08-01 18 views
1

我配置服務器端驗證我的form.My的問題是,當控制再次出現在Areavalidator類服務器端驗證工作不正常

@Override 
    public boolean supports(Class<?> clazz) { 
    return Area.class.isAssignableFrom(clazz); 
} 

從上述方法的控制權交還給控制器類並在錯誤集中顯示零錯誤。我的問題是,爲什麼它沒有進入我正在做我的驗證的東西的方法。 @覆蓋 公共void驗證(對象的目標,誤差錯誤){

Area object = (Area)target; 

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "areaName", 
      "label.areaNameRequired"); 

    if(object.getAreaCode().length()==0) 

    { 
     { 
      errors.rejectValue("areaCode", "label.areaCode", null); 
     } 

    } 

    } 

進行驗證在我的控制器類的代碼

@Autowired 
    private AreaValidator areaValidator; 

    @InitBinder("area") 
    protected void initBinder(WebDataBinder binder) { 
     binder.setValidator(areaValidator); 
    } 

    @RequestMapping(value = "/saveGridArea", method = RequestMethod.POST) 
    public String saveCountry(@ModelAttribute @Valid Area area,ModelMap map,BindingResult error) { 

     if (error.hasErrors()) { 
      return "area"; 
     } 
+0

您是否配置了LocalValidatorFactoryBean Bean或在context.xml文件元素? – edrabc 2012-09-18 10:11:28

回答

0

這是因爲當你這樣做@Valid,預計有對應的BindingResult就在modelAttribute的旁邊: 在這裏,您的ModelMap介於兩者之間,因此框架無法將鏈接/關聯的錯誤與modelAttribute相關聯。

您只需要更改方法變量的順序。

試試這個,它應該工作:

@RequestMapping(value = "/saveGridArea", method = RequestMethod.POST) 
public String saveCountry(@ModelAttribute @Valid Area area,BindingResult error, ModelMap map){ 
     ... 
}