JSF1.2でNetBeans6.5のVisual Web JSFを使った場合の入力値の検証について書いてみようと思う。
実装のサンプルは、話を簡単にするために以下の条件に絞って実装をしてみた。
- テキストボックスには必ず値を入力しなければならない。
- 入力する値は数字である必要がある。
- さらに入力された値は1~10の間の数字でなければならない。
- 未入力時には「必須入力項目です」と表示し、1~10の数字でない場合は「1~10の数値を入力してください」と表示する。
JSF 1.2の入力値の検証
JSF1.2の入力値の検証は、大きく3つの検証のフェーズでチェックされる。
- 必須入力項目化どうか?
- 何か入力されている場合は、入力値は何型かどうか?
- 型変換後の値は、どういう値でなければならないか?
1は、requiredプロパティで指定する。boolean型なのでtrue(必須入力)かfalse(必須ではない)という意味合いになっている。さらに、この検証でエラーがでた場合は、requiredMessageプロパティで指定したメッセージがエラーメッセージとなる。
2は、converterプロパティで指定する。Converterは、文字列から目的の型へ変換するという仕事をする。また、表示用文字列への変換も担っている頑張り屋さんだ。Converterには、標準でInteger,Long.Double,Date,Booleanなど必要そうなものが一通り用意されている。
Converterでエラーが発生した場合は、converterMessageプロパティで指定した文字列がエラーメッセージとなる。
3は、validatorプロパティで指定する。Validatorは、Converterで変換した結果の値の妥当性を検証する。Validatorは、はじめから用意されてるものだとDoubleの範囲チェックを行うもの、文字列の長さをチェックするもの、Longの範囲をチェックするものが用意されている。ちょっと物足りない。
これで満足できなければ、validateイベントで自分で独自のチェックロジックを実装できるようになっている。まぁ、普通にプロジェクトでやるときにはカスタムValidatorを作ることも出来るので自作することになるんだと思う。
Validatorでエラーが発生した場合は、validatorMessageプロパティで指定した文字列がエラーメッセージとなる。
エラーメッセージの表示には、メッセージリストコンポーネントか、インラインメッセージコンポーネントを使用する。メッセージリストは、画面内のエラーメッセージをすべて表示するために使う。画面の上部や下部で、メッセージを一括表示するのに使ったりする。
インラインメッセージは、1つのコンポーネントに対応するエラーメッセージを表示するのに使う。
というわけで実装してみよう
グリッドパネルをデザイナで画面に配置して、そこに標準コンポーネントのテキストフィールドとボタンを置く。
テキストフィールドに、Longコンバータと、Long範囲コンバータを置く。これで数値であることと、特定の範囲であることを検証する。
コンバータとバリデータの設定方法は、パレットからテキストフィールド上に設定したコンバータとバリデータをドラッグアンドドロップするだけでOK。お手軽だ。
Long範囲バリデータは、maximumに10を、minimumに0を指定しておく。必須入力もチェックするので、TextFieldのrequiredプロパティにチェックも入れておく。
そして、テキストフィールドのrequiredMessageプロパティとconverterMessageとvalidatorMessageにエラー時のメッセージを指定する。
最後に、エラーメッセージを表示するためにインラインメッセージコンポーネントをテキストフィールドの下に配置してforプロパティで画面にあらかじめ置いておいたテキストフィールドのidをセットする。
ここまでの操作で画面とナビゲータウィンドウは下のような表示になる。
格コンポーネントのプロパティも下のようになっているはずだ。(変更した部分のみ抜粋)
textField1
- required: true
- converter: longConverter1
- validator: longRangeValidator1
- requiredMessage: 必須入力項目です
- converterMessage: 1~10の数値を入力してください
- validatorMessage: 1~10の数値を入力してください
inlineMessage1
longRangeValidator1
実行して動きを見てみよう。
何も入力しないでボタンを押すと下のようになる。
1~10の数字以外を入力すると下のようになる。
これはConverterでエラーが起きている。
これはValidatorでエラーが起きている。
ちゃんと1~10の数字を入力すると、エラーは起きない。
以上が、簡単だけどJSF1.2(IDEはNetBeans6.5のWebアプリでフレームワークにVisual Web JSFを使った場合)の入力値の検証方法でした。
# 最後まで書いてみて思った。数値だと1.5とか実数も含むんだっけ…まぁここでは整数ということで広い心で解釈してください。