服务器端验证无法正常工作

时间:2012-08-01 09:32:40

标签: spring spring-mvc

我正在为我的表单配置服务器端验证。我的问题是当控件进入Areavalidator类时

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

从上面的方法控制再次回到控制器类,并在错误集中显示零错误。我的问题是,为什么它没有进入我正在做我的验证的东西的方法。  @覆盖     public void validate(对象目标,错误错误){

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

1 个答案:

答案 0 :(得分:0)

这是因为当您执行@Valid时,预计BindingResult旁边会显示相应的modelAttribute: 在这里,您的ModelMap介于两者之间,因此框架无法将链接/关联的错误与modelAttribute相关联。

您只需要更改方法变量的顺序。

试试这个,它应该有效:

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