2012-04-23 5 views
0

Spring MVC 3を使用するWebアプリケーションの検証を実装する必要があります。問題は、BeanクラスにgetProperty( "name")やsetProperty( "name"、valueObj)のようなメソッドがあることです。例えば、getProperty( "age")は16より大きく、getProperty( "state")は必須である必要があるため、getProperty( "name")に異なる値を渡すことによって返されるデータに対してバリデーションを行う必要があります。Spring MVC Beanの検証

この種のBeanの検証がサポートされているかどうか、またそうでない場合は回避策があるかどうかを知りたいと思います。私はそうは思いません

おかげで、 ATIF

+1

をそのクラスがちょうど豆ではない私見次のように手動validatonをするでしょう、あなたのコントローラで

@Component public class MyValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return MyBean.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { MyBean myBean = (MyBean) target; if (StringUtils.isBlank(myBean.getProperty("state"))) { errors.rejectValue("state", "blank"); } } } 

。 – SJuan76

答えて

1

org.springframework.validation.Validatorを実装するカスタム検証クラスが必要なようです。

@Autowired 
private MyValidator myValidator; 

@RequestMapping(value = "save", method = RequestMethod.POST) 
public String save(@ModelAttribute("myBean") MyBean myBean, BindingResult result) { 

    myValidator.validate(myBean, result); 
    if (result.hasErrors()) { 
     ... 
    } 

    ... 

} 
+1

+1、それは動作します。しかし、彼の豆は、妥当性の確認の前に、適切にバインドされません。したがって、カスタムバインドも必要になります。 ;) – Bozho

+0

@Bozho非常に良い点、真のJavaBeansのもう一つの議論:) –

+0

Struts 1.xではDynaBeanと呼ばれていましたが、各クラスを作成するオーバーヘッドなしにxml内のBeanプロパティを定義するだけでした。 Springは、Beanクラスを作成するために、動的に、あるいは設定によって、このようなメソッドを提供していますか? XMLと同様にBeanと検証を定義できますか? –

4

。 Beanの検証は、javabeans、つまりgetterとsetterを持つクラスフィールドで実行されます。カスタムバリデータを登録して検証作業を行っても、バインディングは機能しません。また、オブジェクトに値を設定するカスタムバインダーを登録する必要があります。それはかなり複雑になります。だから、javabeansのコンベンションに固執する。

関連する問題