Extension - 逆引きリファレンス - バリデーション

必須項目であるページクラスのプロパティにアノテーションで TRequiredValidator を指定します.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時,ブラウザで値が入力されないとバリデーションでエラーとなります.

アノテーションの target 属性でチェック対象となるサブミットボタンの id 属性の値を指定します.複数の値をカンマ ( ',' ) 区切りで列挙することができます.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時, doNext ボタンが押されたときだけ name フィールドが入力されているかチェックが行われます.

ページクラスのプロパティにアノテーションで TLengthValidator を指定します. minimum 属性で最低の長さを, maximum 属性で最大の長さを設定します. どちらかの指定を省略することもできます.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時,入力された文字列が3~5文字でなければバリデーションでエラーとなります.

ページクラスのプロパティにアノテーションで TByteLengthValidator を指定します. minimum 属性で最低のバイト数を, maximum 属性で最大のバイト数を設定します. どちらかの指定を省略することもできます.

charSet 属性で文字列からバイト列に変換するエンコーディングを設定することもできます. 省略するとプラットフォームデフォルトのエンコーディングが使われます.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時, 入力された文字列をプラットフォームデフォルトのエンコーディングで変換したバイト列の長さが, 5~10バイトでなければバリデーションでエラーとなります.

ページクラスのプロパティにアノテーションで TRegularExpressionValidator を指定し, pattern 属性で正規表現を設定します.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時,入力された文字列が正規表現にマッチしなければバリデーションでエラーとなります.

ページクラスのプロパティにアノテーションで EmailValidator を指定します. pattern 属性でメールアドレスとして受け入れる正規表現を設定することができます. 省略した場合のデフォルトは

です.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時,入力された文字列がメールアドレスにマッチしなければバリデーションでエラーとなります.

ページクラスのプロパティにアノテーションで UrlValidator を指定します. pattern 属性でメールアドレスとして受け入れる正規表現を設定することができます. 省略した場合のデフォルトは

です.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時,入力された文字列がURLにマッチしなければバリデーションでエラーとなります.

ページクラスのプロパティにアノテーションで TNumberLengthValidator を指定します. integralMin 属性で整数部の最低の長さを, integralMax 属性で整数部の最大の長さを設定します. fractionMin 属性で小数部の最低の長さを, fractionMax 属性で小数部の最大の長さを設定します. いずれかの指定を省略することもできます.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時,入力された数値の小数部が2桁でなければバリデーションでエラーとなります.

ページクラスのプロパティにアノテーションで TLongRangeValidator (整数の場合) または TDoubleRangeValidator (実数の場合) を指定します. minimum 属性で最低の値を, maximum 属性で最大の値を設定します. いずれかの指定を省略することもできます.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時,入力された数値が0~100の範囲内でなければバリデーションでエラーとなります.

テンプレートHTML上で 後から出てくる入力項目 に対応するページクラスのプロパティに, アノテーションで TEqualValidator を指定します. targetId 属性で, 比較対象となる入力項目のプロパティ名を指定します.

例:テンプレートHTML (foo.html)

パスワード (再確認) ]]>
例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時, pwd1pwd2 に入力された値が異なると,バリデーションでエラーとなります.

テンプレートHTML上で 後から出てくる入力項目 に対応するページクラスのプロパティに, 以下のアノテーションのいずれかを指定します (括弧内はTigerアノテーションの名前).

TGreaterValidator ( @Greater )
アノテーションの付けられた項目が比較対象より大きいことをチェックします.
TGreaterEqualValidator ( @GreaterEqual )
アノテーションの付けられた項目が比較対象より大きいか, または等しいことをチェックします.
TLessValidator ( @Less )
アノテーションの付けられた項目が比較対象より小さいことをチェックします.
TLessEqualValidator ( @LessEqual )
アノテーションの付けられた項目が比較対象より小さいか, または等しいことをチェックします.

targetId 属性で, 比較対象となる入力項目のプロパティ名を指定します.

例:テンプレートHTML (foo.html)

終了 ]]>
例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション

ポストバック 時, to に入力された値が from に入力された値より小さいと,バリデーションでエラーとなります.

実行時に動的に作成したバリデータを適用するすることができます. この機能は「ダイナミックバリデータ」と呼ばれます.

ダイナミックバリデータを適用するプロパティに対応する get + プロパティ名 + Validator() という名前の public メソッドを作成します. 引数はなく,戻り値の型は javax.faces.validator.Validator とします.

get~Validator() メソッドでは,リクエストパラメータやセッションの状態を参照して Validator を作成して返すことができます.

注意事項

get~Validator() は PROCESS_VALIDATION フェーズで呼び出されるため, ページクラスのプロパティにはリクエストパラメータの値が反映されていません. JSF とページクラスのライフサイクルについては「 JSFライフサイクルとの関係 」を参照してください.

ポストバック 時, get~Validator() メソッドが返した Validator によってバリデーションが行われます.

例:ページクラス (FooPage.java)

ポストバック 時, name プロパティのバリデーションは getNameValidator() メソッドが返した TLengthValidator によって行われます.

javax.faces.internal.ValidatorChain を使います. ValidatorChainadd(Validator validator) メソッドで適用したいバリデータを追加します. バリデータは追加された順に適用されます.
例:ページクラス (FooPage.java)

ページクラスに名前が param で型が java.util.Map のプロパティを用意します. Seasar2によってこのプロパティにリクエストパラメータを含む Map が設定されます.

get~Validator() メソッドの中で, param プロパティからパラメータ名をキーとしてパラメータ値を取得することができます.

リクエストパラメータの名前は基本的に

  • <form>要素のid  + ':' + <input>要素等のid

という形になります.

例:テンプレートHTML (foo.html)
... ]]>
例:パラメータ名

レイアウト を使っている場合は <includeChildBody> 要素や <include> 要素の id 属性の値が前に付加され,

  • <includeChildBody>要素等のid  + ':' + <form>要素のid  + ':' + <input>要素等のid

となります.

例:テンプレートHTML (layout.html)
]]>
例:パラメータ名

forEach を使っている場合は, <tbody> 要素等の id 属性の値と繰り返しのインデックスが付加され,

  • [ <includeChildBody>要素等のid  + ':' + ] <form>要素のid  + ':' + forEachのid  + ':' + forEachのインデックス  + ':' + <input>要素等のid

となります.

例:テンプレートHTML (foo.html)
...
]]>
例:パラメータ名

forEachがネストすると, そのたびにforEachの id 属性の値と繰り返しのインデックスが付加されます.

より複雑な相関チェックや, DBアクセスが必要な場合など, Validator によるバリデーションでは不十分な場合は do~() メソッド でバリデーションを行うことができます.

注意点

画面の入力項目に対応付けられたページクラスのプロパティの値を変更すると, 表示される画面の内容は変更後のプロパティの値になってしまいます. バリデーションが完了するまでは, 画面に対応付けられたプロパティを変更しないようにする必要があります.

do~() メソッドでバリデーション違反を検出した場合に メッセージを設定するには, ページクラスに org.seasar.teeda.extension.util.FacesMessageHelper 型のプロパティを用意します.

FacesMessageHelper には以下のメソッドがあります.

  • FATALレベル
    • void addFatalMessage(String messageId)
    • void addFatalMessage(String messageId, Object[] args)
    • void addFatalMessage(String clientId, String messageId)
    • void addFatalMessage(String clientId, String messageId, Object[] args)
  • ERRORレベル
    • void addErrorMessage(String messageId)
    • void addErrorMessage(String messageId, Object[] args)
    • void addErrorMessage(String clientId, String messageId)
    • void addErrorMessage(String clientId, String messageId, Object[] args)
  • WARNレベル
    • void addWarnMessage(String messageId)
    • void addWarnMessage(String messageId, Object[] args)
    • void addWarnMessage(String clientId, String messageId)
    • void addWarnMessage(String clientId, String messageId, Object[] args)
  • INFOレベル
    • void addInfoMessage(String messageId)
    • void addInfoMessage(String messageId, Object[] args)
    • void addInfoMessage(String clientId, String messageId)
    • void addInfoMessage(String clientId, String messageId, Object[] args)

messageId には, メッセージリソース ファイルに定義したキーを指定します.

特定の入力項目 (プロパティ) に関連付けられたメッセージを設定するには, clientId を指定します. 指定する値は get~Validator()メソッドの中でリクエストパラメータを参照するには のリクエストパラメータ名と同じです.

clientId を指定したメッセージは メッセージを表示するには で設定したエリアに出力されます. clientId を指定しなかったメッセージは グローバルなメッセージを表示するには で設定したエリアに出力されます.

バリデーション対象の <input> 要素等の id 属性の値 + "Message"id 属性とする <span> 要素を記述します.

例:テンプレートHTML (foo.html)
dummy ]]>
例:レンダリング結果

ポストバック 時,バリデーションでエラーになると次のように表示されます.

値を入力してください(name) ]]>

相関チェックによるエラーメッセージなど, 特定の入力項目に属さないメッセージを表示するには, id 属性が "messages"<span> 要素を記述します.

グローバルなメッセージがある場合, <span> 要素は <ul> 要素に置き換えられ,個々のメッセージが <li> 要素として出力されます.

グローバルなメッセージがない場合, <span> 要素も <ul> 要素も出力されません. このため, <span> 要素の外側に <div> 要素を記述することを推奨します.

例:テンプレートHTML (foo.html)
]]>
例:レンダリング結果

ポストバック 時,バリデーションでエラーになると次のように表示されます.

  • "to"の値は"form"よりも大きくなくてはいけません。
]]>

id 属性が "allMessages"<span> 要素を記述します.

メッセージがある場合, <span> 要素は <ul> 要素に置き換えられ,個々のメッセージが <li> 要素として出力されます.

表示するメッセージがない場合, <span> 要素も <ul> 要素も出力されません. このため, <span> 要素の外側に <div> 要素を記述することを推奨します.

例:テンプレートHTML (foo.html)
]]>
例:レンダリング結果

ポストバック 時,バリデーションでエラーになると次のように表示されます.

  • 値を入力してください(name)
  • "to"の値は"form"よりも大きくなくてはいけません。
]]>

以下から変更したいメッセージを探し,同じキーを持つ独自のメッセージを appMessages.propertyes (日本語のメッセージは appMessages_ja.properties ) に定義します.

 
例:メッセージリソースファイル (appMessage_ja.properties)

関連項目

バリデーションのアノテーションに独自のメッセージIDを指定し, それをキーとするメッセージを appMessages.propertyes (日本語のメッセージは appMessages_ja.properties ) に定義します.

例:ページクラスのプロパティ (FooPage.java)
Tigerアノテーション
定数アノテーション
例:メッセージリソースファイル (appMessage_ja.properties)

関連項目

エラーとなった要素は class 属性に onTeedaError が追加されるので,CSSで背景を変えるなどして目立たせることができます.

例:テンプレートHTML (foo.html)
.onTeedaError { background-color: #FFCCCC; } ]]>

ポストバック 時, バリデーションでエラーになると, テキストフィールドやテキストエリアの背景が設定した色で表示されます.

バリデーション対象となる <input> 要素等に title 属性で項目名を指定します.

例:テンプレートHTML (label_ja.properties)
dummy ]]>
例:レンダリング結果

ポストバック 時,バリデーションでエラーになると次のように表示されます.

値を入力してください(名前) ]]>

ラベルリソース ファイルに pagename.id または id という名前のプロパティを定義します. id は, バリデーション対象となる <input> 要素等の id 属性の値です.

あるいは,バリデーション対象となる <input> 要素等に title 属性を付け, その値を key + Label とします. ラベルリソース ファイルに pagename.key または key という名前のプロパティを定義します.

例:テンプレートHTML (foo.html)
dummy ]]>

あるいは,

dummy ]]>
例:ラベルリソースファイル (label_ja.properties)
例:レンダリング結果

ポストバック 時,バリデーションでエラーになると次のように表示されます.

値を入力してください(名前) ]]>