我有一個表單我想要驗證。它包含2個地址變量。地址1一直被驗證,地址2已經根據一些條件來進行驗證Spring MVC和JSR-303休眠條件驗證
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」作爲字段名不正確(而不是「address2.street」街')和結合將無法工作。
一些骯髒的方法將擴展BeanPropertyBindingResult接受一些字符串追加到字段名稱..你有更好的方法?
感謝axtavt你應該使用Spring本地驗證API,它的工作原理。我想知道這是否是實現它的最佳方法,爲什麼@Valid中沒有組屬性,並且JSR-303組概念是實現條件驗證的唯一方法 – mickthompson 2010-10-25 15:06:59
有一個針對'@ Valid'組的特性請求:https://jira.springframework.org/browse/SPR-6373 – axtavt 2010-10-25 15:34:12
非常有幫助,謝謝 – mickthompson 2010-10-26 10:29:32