- PR -

strutsでカスタムバリデータ

1
投稿者投稿内容
ヒデユキ
会議室デビュー日: 2008/02/11
投稿数: 5
投稿日時: 2008-06-23 01:25
こんばんは。
javascriptとstrutsでwebアプリケーション開発を行っています。

<html:form action="xxxx">
<input type="text" name="T1">
<input type="text" name="T2">
<input type="submit" value="確認">
</form>

jspファイルでテキストボックスを2つ作ります。(上の要領で)
やりたい事↓
・name="T1"のテキストボックスが空欄だったら「T1の値が不正です。」と警告ダイアログを表示させる。
・name="T2"のテキストボックスが空欄だったら「T2の値が不正です。」と警告ダイアログを表示させる。
・name="T1" name="T2"両方のテキストボックスが空欄だったら「両方不正です。」と警告ダイアログボックスを表示させる。

これをvalidateを使って実装します。
・name="T1"のテキストボックスが空欄だったら「T1の値が不正です。」と警告ダイアログを表示させる。
・name="T2"のテキストボックスが空欄だったら「T2の値が不正です。」と警告ダイアログを表示させる。

この条件は満たす事が出来るのですが、

・name="T1" name="T2"両方のテキストボックスが空欄だったら「T1の値が不正です。\nT2の値が不正です。」となってしまいます。(\nは改行)

色々調べてコーディングしてみましたがうまく行きません。
・validate のvalidwhenを使ってみましたが、警告ダイアログの表示が出来ませんでした。
・カスタムバリデータを使ってみましたが、JSF向きのものらしいです。
(strutsでは使う事が出来ませんでした。)

☆javascriptのみを使って実装する方法はなしで考えます。

何か良い案ありましたらご指導宜しくお願いします。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2008-06-23 22:48
具体的にどのような方法で実装されたのかがわかりませんが、form は ValidatorForm を extend して、validation.xml にフィールドのバリデーションルールを記述したと考えてよろしいでしょうか。

やや記憶が定かではありませんが、この方法では複数項目を対象として一つのメッセージを出力するようなルールは書けなかったような気がします。
(私が調べた範囲では見つからなかっただけかもしれません。)

この場合は、関連する項目のルールを validation.xml からは削除し、自前で ValidatorForm#validate() メソッドをオーバーライドし、その中でバリデーション処理を実装する方法でできたように思います。(これも定かではありませんが(_ _))

いくつか注意が必要ですので、この点はお気を付けください。

  • T1, T2 の入力が必須というルールは validation.xml に書かず、validate() メソッドの中で実装する。
    (こうしないと、「T1が不正」「T2が不正」「両方不正」の三つのメッセージが出てしまいます。
    「両方不正」の場合は「T1が不正」「T2が不正」の出力を抑制する必要がありますが、これは validation.xml に書けません。)
  • オーバーライドした validate() メソッドの中では、必ず super.validate() を実行する。
    (これが抜けていると、当該フォームで validation.xml に記述したルールが無視されます。
    super.validate() の結果として ActionErrors オブジェクトが返されるので、自前のバリデーション結果はこれに追加するのが自然でしょう。)


メソッド引数は省略しましたが、API に従って適宜補ってください。

以上、ご参考になれば幸いです。
1

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