- PR -

StrutsのValidatorの実装で複数の値の処理は?

投稿者投稿内容
あら
会議室デビュー日: 2003/10/03
投稿数: 8
お住まい・勤務地: 札幌
投稿日時: 2004-02-05 22:07
もう既に実装できてしまったみたいなので、今更という感じですが・・・

折角コードを書いて頂けてるので、私が昔書いたものと比べると・・・

Object temp = ((DynaActionForm) bean).get(field.getProperty());
とされているところは、
Object temp = PropertyUtils.getProperty(bean, field.getProperty());
としています。

結果が違うわけではないし、どっちが良いか解りませんが、参考になれば。

[ メッセージ編集済み 編集者: あら 編集日時 2004-02-05 22:07 ]
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2004-02-05 22:51
実は同じコードを最初は書いてましたが、複数の値の際には上手く取れなかったので最終的にクラスキャスティングをしちゃいました。うん。。。なんでだめだったのかはいま直ぐは思い出せません。色んな方法を試してたんで。。
取りあえず、ありがとうございました。
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2004-02-06 14:35
すみません。うそをつきました。あらさんの下記方でも上手く行きました。
で、現在はこんな感じになってます。動作確認中ですが今までは問題ありません。。

public static boolean validateFlagType(
Object bean,
ValidatorAction va,
Field field,
ActionErrors errors,
HttpServletRequest request) {

// バリデーションの対象がない場合はスキップ
if (bean == null)
return true;

// バリデーション対象がStringである場合はそのままバリデーションを実行
if (isString(bean) && !bean.equals("")) {
if (!StringUtil.isFlagType((String) bean)) {
errors.add(
field.getKey(),
Resources.getActionError(request, va, field));
return false;
}
return true;
}

// バリデーション対象がString以外のオブジェクトである場合のバリデーション処理
try {
Object temp = PropertyUtils.getProperty(bean, field.getProperty());
// チェック項目が空である場合は無視する。
if (temp == null || temp.equals(""))
return true;
String[] value = isString(temp) ? new String[] {(String) temp }
: (String[]) temp;

for (int i = 0; i < value.length; i++) {
if (!StringUtil.isFlagType(value[i])) {
errors.add(
field.getKey(),
Resources.getActionError(request, va, field));
return false;
}
}
} catch (Exception e) {
errors.add(
field.getKey(),
Resources.getActionError(request, va, field));
return false;
}
return true;
}

スキルアップ/キャリアアップ(JOB@IT)