1

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

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

从上述方法中,控件再次返回到控制器类,在错误集中它显示零错误。我的问题是为什么它没有进入我正在做验证工作的方法中。@Override 公共无效验证(对象目标,错误错误){

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

1 回答 1

0

这是因为当你这样做时@Valid,它应该在 :BindingResult旁边有相应的权利modelAttribute:这里,你ModelMap介于两者之间,使得框架无法将链接/关联的错误与modelAttribute.

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

试试这个,它应该工作:

@RequestMapping(value = "/saveGridArea", method = RequestMethod.POST)
public String saveCountry(@ModelAttribute @Valid Area area,BindingResult error, ModelMap map){
        ...
}
于 2013-01-25T16:55:44.697 回答