mic*_*son 9 java validation spring spring-mvc bean-validation
我有一个我要验证的表单.它包含2个地址变量.始终要验证address1,必须根据某些条件验证address2
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
Run Code Online (Sandbox Code Playgroud)
我的控制器自动验证并绑定我的表单obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
Run Code Online (Sandbox Code Playgroud)
问题是,如果我使用LocalValidatorFactoryBean验证器,我无法重用Spring提供的BinidingResult对象.绑定不起作用,因为'result'的目标对象是'MyForm'而不是'Address'
validate(form.getAddress2(), bindingResult) //won't work
Run Code Online (Sandbox Code Playgroud)
我想知道什么是标准/清洁方法来进行条件验证.
我正在考虑以编程方式在我的控制器中创建一个新的BindingResult.
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
Run Code Online (Sandbox Code Playgroud)
但是我从bindingResultAddress2获得的错误列表无法添加到一般的'bindingResult',因为字段名称不正确('street'而不是'address2.street'),绑定将不起作用.
一些肮脏的方法是扩展BeanPropertyBindingResult以接受一些字符串附加到字段名称..你有更好的方法吗?
验证层次结构的标准方法是使用pushNestedPath()
/ popNestedPath()
,虽然我不确定它如何与JSR-303一起使用:
bindingResult.pushNestedPath("address2");
validate(form.getAddress2(), bindingResult);
bindingResult.popNestedPath();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5647 次 |
最近记录: |