ネストしたプロパティで入力チェックの実装
2008-04-19 のエントリー。
自分でカスタマイズするなら ActionCustomizer を継承し、setupValidator メソッドに少しコードを追加するすることで対応可能です。プロパティを getClass() して、その定義クラスを getFileds() し、getAnnotations() した後、プロパティ名 + "." + ネストプロパティ名をバリデーション対象として登録みたいな感じだったと思います。
ネストしたプロパティで入力チェック - C/pHeR Memo - Java とか。Eclipse とか。
コード・イメージはこんなのです。
// アクション・カスタマイザ・クラス public class HogeActionCustomizer extends ActionCustomizer { // バリデータのセットアップ @Override protected void setupValidator(S2ActionMapping actionMapping, S2ValidatorResources validatorResources) { ・・・(省略) for (int i = 0; i < beanDesc.getPropertyDescSize(); i++) { ・・・(省略) for (Annotation anno : field.getDeclaredAnnotations()) { processAnnotation( pd.getPropertyName(), anno, validatorResources, forms); } // 追加 ここから Class<?> c = field.getType(); if (c != String.class && c != Boolean.class) { for (Field f : c.getFields()) { for (Annotation anno : f.getDeclaredAnnotations()) { processAnnotation(pd.getPropertyName() + "." + f.getName(), anno, validatorResources, forms); } } } // 追加 ここまで } validatorResources.addForm(baseForm); for (Iterator<Form> i = forms.values().iterator(); i.hasNext();) { validatorResources.addForm(i.next()); } } }