- PR -

Struts Validator ルール作成時に、配列を取得するには?

1
投稿者投稿内容
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2003-10-03 01:54
現在、新たな検証ルールを作成しているのですが、名前が同じフォームが
複数ありまして、その値を検証するにはどうすればよいか悩んでいます。

名前の重複がなければ、

コード:
public static boolean validatexxxxxxxx(Object bean, 
                                       ValidatorAction va, 
                                       Field field, 
                                       ActionErrors errors, 
                                       HttpServletRequest request){
        String value = null;

        if (String.class.isInstance(bean)) 
        {
            value = (String) bean;
        } 
        else 
        {
            value = ValidatorUtil.getValueAsString(bean, field.getProperty());
        }


で、値を取得できるのですが、名前が重複しており、値が配列になる
ような場合でも、その配列を取得して検証することは可能でしょうか?

もし、可能であればどのように取得したらよいでしょうか?
よろしくお願い致します。
Kiriko
常連さん
会議室デビュー日: 2003/09/25
投稿数: 25
投稿日時: 2003-10-03 02:45
こんばんは。
Kiriko@有給休暇モードです

引用:

アレクさんの書き込み (2003-10-03 01:54) より:
名前が同じフォームが複数ありまして、
その値を検証するにはどうすればよいか悩んでいます。


ここでおっしゃっている名前とは テキストフィールド、チェックボックスなどの
入力部品の名前ということでよろしいですよね。


引用:

名前が重複しており、値が配列になる
ような場合でも、その配列を取得して検証することは可能でしょうか?


チェックボックスなどのフォームオブジェクトの名前が重複する場合、
重複した回数validateメソッドが実行されるのか、
validateメソッドは1回のみ実行され、validateメソッドのパラメータに
配列として値が渡されるのかは実験していないのでわかりません
(もう眠いので^^)。
実験の方法としては、validateメソッドで
ログ出力するようにして、複数の値を持つリクエストパラメータに
対して何回validateメソッドが呼ばれるか調べればよいと思います。
また、もし配列として値がvalidateメソッドに
渡されるのならば、
次のようなコードを追加すれば取得可能かと思います。
Collectionで渡されるのかもしれませんが・・・
コード:

String[] values;
・・・・・・
else if (String[].class.isInstance(bean)) [
// 配列として値が渡された
values = (String[])bean;
}



実験結果のご報告をお待ちしております。
※重複回数validateメソッドが呼ばれると予想しています^^


[ メッセージ編集済み 編集者: Kiriko 編集日時 2003-10-03 04:23 ]
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2003-10-03 11:13
Kiriko さん、早速のご返信ありがとうございます。

引用:

チェックボックスなどのフォームオブジェクトの名前が重複する場合、
重複した回数validateメソッドが実行されるのか、
validateメソッドは1回のみ実行され、validateメソッドのパラメータに
配列として値が渡されるのかは実験していないのでわかりません
(もう眠いので^^)。
実験の方法としては、validateメソッドで
ログ出力するようにして、複数の値を持つリクエストパラメータに
対して何回validateメソッドが呼ばれるか調べればよいと思います。



◆ログと Eclipse のデバッグによる実験結果

 パラメータの名前が重複する場合、validate メソッドが呼ばれるのは
 一回のみで、配列として値が渡されるようです。

◆Validator 内での配列の取得に関して

 デバッグで public static boolean validatexxxx() メソッドに渡される
 引数を調べてみましたが、Object bean には、検証の対象となる ActionForm
 が渡されていました。(知らなかった

 それで、"data" という名前のテキストボックスが複数ある場合、
 
コード:
 String[] value = null;
                
  if (TestActionForm.class.isInstance(bean)) 
  {
        TestActionForm testform = (TestActionForm) bean;
        value = testform.getData();
  }


 としてやると、配列の値を取得することが出来ました。

でも、これって汎用性がないですよね。
ValidatorUtil にも配列を返してくれるようなメソッドは無いし・・・。

StrutsValidator には (bean, field.getProperty()) を渡せば、
配列の値を返してくれるような機能はないのでしょうか?

何か良い方法がありましたら、ご教授下さい。
よろしくお願い致します。
あら
会議室デビュー日: 2003/10/03
投稿数: 8
お住まい・勤務地: 札幌
投稿日時: 2003-10-03 12:31
はじめまして。

PropertyUtilsを使って、以下のようにやってます。

Object obj = PropertyUtils.getProperty(bean, field.getProperty());
String[] values = (String[])obj;

お役に立ちますか?
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2003-10-03 12:53
おお!
あらさん、ありがとうございます。

引用:

PropertyUtilsを使って、以下のようにやってます。

Object obj = PropertyUtils.getProperty(bean, field.getProperty());
String[] values = (String[])obj;

お役に立ちますか?



この方法でうまくいきました!!
ありがとうございました。<(_ _)>
Kiriko
常連さん
会議室デビュー日: 2003/09/25
投稿数: 25
投稿日時: 2003-10-03 16:44
こんにちは。

アレクさん実験結果を報告していただいて
ありがとうございます。
無事解決されたようですね。

引用:

アレクさんの書き込み (2003-10-03 11:13) より:
◆ログと Eclipse のデバッグによる実験結果

 パラメータの名前が重複する場合、validate メソッドが呼ばれるのは
 一回のみで、配列として値が渡されるようです。


予想がはずれた^^;

引用:

◆Validator 内での配列の取得に関して

 デバッグで public static boolean validatexxxx() メソッドに渡される
 引数を調べてみましたが、Object bean には、検証の対象となる ActionForm
 が渡されていました。(知らなかった


私も知りませんでした。
ActionFormだったとはかなりびっくりしました^^

あらさんの投稿も勉強になりました。

ありがとうございました。

(独り言)
「なんか情報をTakeしてばっかりだなあ。
情報交換の場である会議室にGiveしなければ。。。>自分」
1

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