在Spring MVC应用程序中,表单数据验证未正确进行,并且org.springframework.validation.BeanPropertyBindingResult没有报告任何错误。
@RequestMapping(value="downloadfile", method=RequestMethod.POST)
public String submitForm(@ModelAttribute("downloadMVbinder")
@Valid DownloadFileVO downloadFileVO,
BindingResult bindingResult,
Model model) {
System.out.println("Binding result object value ==> " + bindingResult.toString());
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<DownloadFileVO>> constraintViolations = validator.validate(downloadFileVO);
System.out.println("Constrain Violation object value ==>" + constraintViolations.toString());
System.out.println("Model object value ==> " + model.toString());
System.out.println("Model object value ==> " + downloadFileVO.toString());
if (bindingResult.hasErrors()){
return "DownloadfilePage";
}
调试输出为
Binding result object value ==> org.springframework.validation.BeanPropertyBindingResult: 0 errors
Constrain Violation object value ==>[ConstraintViolationImpl{interpolatedMessage='length should be between 5 and 8 characters', propertyPath=password, rootBeanClass=class com.user1.test.model.DownloadFileVO, messageTemplate='length should be between 5 and 8 characters'}, ConstraintViolationImpl{interpolatedMessage='file length cannot be greater than 44 bytes length', propertyPath=fileName, rootBeanClass=class com.user1.test.model.DownloadFileVO, messageTemplate='file length cannot be greater than 44 bytes length'}, ConstraintViolationImpl{interpolatedMessage='length should be between 5 and 8 characters', propertyPath=userName, rootBeanClass=class com.user1.test.model.DownloadFileVO, messageTemplate='length should be between 5 and 8 characters'}]
Model object value ==> {downloadMVbinder=DownloadFormVO [ipAddres=NONEuserName=password=fileName=windowsPath=], org.springframework.validation.BindingResult.downloadMVbinder=org.springframework.validation.BeanPropertyBindingResult: 0 errors}
Model object value ==> DownloadFormVO [ipAddres=NONEuserName=password=fileName=windowsPath=]
我在查看帖子0 errors后更新了方法参数。仍然没有在bindingResult中得到错误。我还使用javax.validation.ConstraintViolation验证了模型对象,该对象捕获了违规行为。
您能帮忙解决为什么绑定结果对象中未显示错误的原因。
谢谢!
答案 0 :(得分:0)
我已经使用SpringValidatorAdapter公开了JSR 303验证程序。答案基于帖子use of bindingresult和convert JSR-303 validation errors to bindingresult
@RequestMapping(value="downloadfile", method=RequestMethod.POST)
public String submitForm(@ModelAttribute("downloadMVbinder")
@Valid DownloadFileVO downloadFileVO,
BindingResult bindingResult,
Model model) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<DownloadFileVO>> constraintViolations = validator.validate(downloadFileVO);
SpringValidatorAdapter springValidator = new SpringValidatorAdapter(validator);
springValidator.validate(downloadFileVO, bindingResult);
if (bindingResult.hasErrors()){
return "DownloadfilePage";
}