cypher256's blog

Pleiades とか作った

ネストしたプロパティで入力チェックの実装

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());
        }
    }
}