- PR -

JSFのバリデーション制御

1
投稿者投稿内容
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2006-01-21 00:57
お世話になっております。

JSFのバリデーションに関する質問なのですが、一つのフォームに複数のsubmitボタンが存在する場合に、押下されたボタンに応じてバリデートするフィールドを変化させることは可能でしょうか?

例えばフォーム内にa,b,の2つのフィールドとA,Bの2つのsubmitボタンがあり、Aのボタン押下時はaをrequiredとし、Bのボタン押下時にはbをrequiredとする様な処理です。

現時点では試行錯誤の上、ActionListenerでコンポーネントツリーを使い、バリデーションを適用したいUIコンポーネントのprocessValidatorsをコールしています。

この方法で一応は動作するのですが、フォーム内のフィールドが増えてきた場合に保守性が低下する事を懸念しております。

どなたかよい方法をご存知の方がいらっしゃいましたらご教授願います。
毎回質問ばかりで申し訳ございません。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-01-23 15:00
一番簡単なのは,フィールドaとボタンAを一つのフォームにして,
フィールドbとボタンBを別のフォームにすることだと思います.
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2006-01-24 00:33
ご返答ありがとうございます。

確かにフォームを分けるのが一番簡単なのですが、Aのフォームをsubmitした時に、Bのフォームで編集していた内容が消えて(最後にresponseを受け取った状態に戻って)しまう事が仕様上問題となるため、その方法は使えないのです。

submitした段階でフォームに入力されている値を全て保持したまま、一部をバリデートする方法を探しております。

もしもJSFでの対応が難しいようでしたら、他のフレームワークを使用することも考慮していますので、良いフレームワークをご存知でしたら教えていただけないでしょうか。

宜しくお願いします。

henachoco
常連さん
会議室デビュー日: 2005/11/21
投稿数: 29
お住まい・勤務地: 新ハンドル:t_yamo
投稿日時: 2006-01-26 15:55
バリデータとコンポーネントの対応付けをJSPに記述していますので、それよりも細かい粒度でハンドリングしたい場合は既存のしくみだけでは無理が出てくると思います。
私の場合は既存のバリデータを捨ててAction内でチェックする機構(複数の項目にまたがるチェックなどもこの機構に含める)を作りますが、以下にこれ以外で思いついた方法を記します。

1.バリデータを集約するカスタムコンポーネントを作り、そのコンポーネントで子コンポーネントのバリデータを実行するか否かをハンドリングする。

2.PhaseListenerを作り、このクラスでUIComponentを改竄して子コンポーネントのバリデータの追加/削除を行なう。

2は思いついただけなのでやめた方が良いと思います。
JSF的には1が妥当かと。
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2006-01-27 00:39
ご返答ありがとうございます。

やはりカスタムコンポーネントを自作する方法がベターみたいですね。
もっと簡単に実現できないかな?と楽をしようとしたのですが、世の中そこまで甘くありませんね。

手間ですが、一度作ってしまえば使い回し出来そうですので、カスタムコンポーネントの作成にチャレンジしてみようと思います。

有難うございました。
1

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