- PR -

struts DynaValidatorForm と ValidatorForm の違い

1
投稿者投稿内容
kejiuyudu
ベテラン
会議室デビュー日: 2004/08/11
投稿数: 82
投稿日時: 2004-09-08 18:10
すみません。struts でもう一つ質問があります。
DynaValidatorForm と ValidatorForm の使い分けが明確でないので御指導頂きたいと思います。自分で考えた解釈が以下の通りなのですが、どうなのでしょうか?


・[DynaValidatorForm] は struts-config に<form-bean>配下の<form-property>内に記述することで自動的に setter,getter,検証機能 が備わる。

・[ValidatorForm] は setter,getterを持つActionFormクラスが、ValidatorForm を継承することで、検証機能を備える。


上記の自分なりの解釈はどうなのでしょうか?
また、もし上記の解釈でOKなら、自分としては DynaValidatorForm を使用した方が簡単だったのですが、現場ではどのように使い分けていらっしゃるのですか?よろしくお願いします。

[ メッセージ編集済み 編集者: ryo 編集日時 2004-09-08 18:15 ]
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-09-09 09:11
ryoさん、こんにちは。
[DynaValidatorForm]と[ValidatorForm]が一般的にどのように使い分けられているか、私も大変興味があります。

[ValidatorFomr]を使う場合は、画面ごと(入力の内容が異なるForm)にActionFormクラスを継承した、XxxxActionFormクラスという固有のクラスが増えていきます。
一方DynaValidatorFormは、継承せずにそのまま使えるので、画面が増えてもDynaValidatorFormクラスだけで大丈夫です。

DynaValidatorFormの利点はクラスの数を最小限に抑えることができるということではないでしょうか?ただし、複雑なプロパティを扱う場合は不便かもしれません。

使い分けとしては、なるべくDynaValidatorFormを使い、どうしても複雑なプロパティ(確か、DynaValidatorFormで使えるプロパティの型には制限があったと思います)を扱う場合はActionFormクラスを継承した固有のActionFormクラスを作って使うようにしていました。
KaNi
常連さん
会議室デビュー日: 2003/06/04
投稿数: 36
お住まい・勤務地: 埼玉県
投稿日時: 2004-09-09 11:09
こんにちは。

画面でチェックボックスになっているところがあって、ActionForm#reset()をオーバーライドしたい時はDynaじゃ(新たにクラスを作る必要があって)メリットが無くなってしまうと思っています。
あと、ひとつのアプリケーションの中でDynaActionFormとActionFormが混じると混乱を招くかなって思ったのですが、いかがでしょうか。

上記二つをならべると、Dynaは使えないじゃん、てことになりうるのですが・・・。
IDEでSetter, Getterを簡単に生成できるのを考えると、正直DynaActionFormに価値を見いだせておりません。
kejiuyudu
ベテラン
会議室デビュー日: 2004/08/11
投稿数: 82
投稿日時: 2004-09-09 12:02
KaNiさん、taipingさん、お返事有難うございます。
taipingさんのおっしゃるDynaValidatorFormの利点は自分でも感じました。統一性みたいなものを・・・。

KaNiさんの「画面でチェックボックス・・・・・、ActionForm#reset()をオーバーライドしたい時はDynaじゃ・・・・メリットが無くなってしまう」のところをもう少し詳しく教えて頂けますか?
よろしくお願いします。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2004-09-09 13:38
DynaValidatorFormとActionFormが混ざるのはかまわないと考えます。

formを定義しているXMLでどちらのフォームが定義してあるのかが分かり易ければ問題ないと思います。
taiping様のおっしゃることと同感で、「複雑なパラメータのやりとりする」や、「データベースにアクセスして値をチェックする」等の必要があるのであればActionForm、そうでなければDynaValidatorFormというような使い分けをしています。
KaNi
常連さん
会議室デビュー日: 2003/06/04
投稿数: 36
お住まい・勤務地: 埼玉県
投稿日時: 2004-09-09 18:47
こんにちは。

引用:

KaNiさんの「画面でチェックボックス・・・・・、ActionForm#reset()をオーバーライドしたい時はDynaじゃ・・・・メリットが無くなってしまう」のところをもう少し詳しく教



画面上でチェックチェックボックスの項目を扱うときに、チェックをつけた情報はサブミットされるのですが、外した情報はサブミットされません。
それに対応するために、Setterの直前に通るActionForm#reset()をオーバーライドして、その中で

hoge = false;

の様なことをしてあげるのですが、このようにコードを書かなければいけないので、XMLで定義するのは不可能と判断しました。
DynaValidatorFormを継承したクラスを作ってそれをtypeで指定してあげれば・・・と思ったのですが、新しくクラスを作るって時点でDynaのメリットを食いつぶしてるかな、と。

あと、DynaActionFormを使ったときにgetした後にキャストが必要で、ここでキャストするクラスが間違っててもコンパイル時にはエラーになりませんが、ActionFormなら型が間違ってたら怒られるからその分の凡ミスが増えるかも、とも思いました。
これはちゃんと気をつければ良いことなのですが・・・。

以上が理由でした。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2004-09-09 23:55
引用:

KaNiさんの書き込み (2004-09-09 18:47) より:
それに対応するために、Setterの直前に通るActionForm#reset()をオーバーライドして、その中で

hoge = false;

の様なことをしてあげるのですが、このようにコードを書かなければいけないので、XMLで定義するのは不可能と判断しました。


DynaValidatorFormはパラメータの初期値が指定できませんでしたっけ?
「hogeというパラメータの初期値をfalseに設定して、後はチェックボックスがチェックされているものだけがsetterでtrueに設定される」ということで解決しませんかね?

引用:

あと、DynaActionFormを使ったときにgetした後にキャストが必要で、ここでキャストするクラスが間違っててもコンパイル時にはエラーになりませんが、ActionFormなら型が間違ってたら怒られるからその分の凡ミスが増えるかも、とも思いました。
これはちゃんと気をつければ良いことなのですが・・・。


確かに、それはあるかも。。。
KaNi
常連さん
会議室デビュー日: 2003/06/04
投稿数: 36
お住まい・勤務地: 埼玉県
投稿日時: 2004-09-10 02:10
こんばんは。

引用:

DynaValidatorFormはパラメータの初期値が指定できませんでしたっけ?
「hogeというパラメータの初期値をfalseに設定して、後はチェックボックスがチェックされているものだけがsetterでtrueに設定される」ということで解決しませんかね?



すみません、説明が足りませんでした。
ここで言っているのは、Sessionスコープに入れたときの場合です。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=6554

検索したら、こちらのスレッドの後半で話題が出てましたので、リンクで替えさせて頂きます(手抜きとも言う)
1

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