我正在为我的表单配置服务器端验证。我的问题是当控件进入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";
}
答案 0 :(得分:0)
这是因为当您执行@Valid
时,预计BindingResult
旁边会显示相应的modelAttribute
:
在这里,您的ModelMap
介于两者之间,因此框架无法将链接/关联的错误与modelAttribute
相关联。
您只需要更改方法变量的顺序。
试试这个,它应该有效:
@RequestMapping(value = "/saveGridArea", method = RequestMethod.POST)
public String saveCountry(@ModelAttribute @Valid Area area,BindingResult error, ModelMap map){
...
}