【发布时间】:2011-04-30 03:03:56
【问题描述】:
我有一个要验证的表单。它包含 2 个地址变量。 address1 必须始终被验证,address2 必须根据某些条件进行验证
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
我的控制器自动验证并绑定我的表单 obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
问题是,如果我使用 LocalValidatorFactoryBean 验证器,我无法重用 Spring 提供的 BinidingResult 对象。绑定不起作用,因为“结果”的目标对象是“MyForm”而不是“地址”
validate(form.getAddress2(), bindingResult) //won't work
我想知道进行条件验证的标准/干净方法是什么。
我正在考虑以编程方式在我的控制器中创建一个新的 BindingResult。
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
但是我从 bindingResultAddress2 获得的错误列表无法添加到一般的“bindingResult”中,因为字段名称不正确(“street”而不是“address2.street”)并且绑定不起作用.
一些肮脏的方法是扩展 BeanPropertyBindingResult 以接受一些字符串附加到字段名称.. 你有更好的方法吗?
【问题讨论】:
标签: java spring validation spring-mvc bean-validation