フォーム入力を検証する
多くの Web アプリケーションフレームワークと同様に Wicket にもフォーム入力を検証するための機能があります。デフォルトで数値の範囲、文字列の長さ、正規表現へのマッチ、必須入力などの用途のバリデータが用意されています。
使い方
バリデータの追加
コンポーネントにバリデータを追加することで検証が行われるようになります。
public MyForm() {
add(new TextArea("comment").add(LengthValidator.max(3)));
}
ここでは LengthValidator を TextArea に追加しました。このテキストエリアに 4 文字以上入力するとエラーになります。次の例では TextField に PatternValidator を追加しています。これで英字のみを受け付けるテキストフィールドとなります。
public MyForm() {
add(new TextField("userId").add(new PatternValidator("\\p{Alpha}")));
}
検証の種類 (バリデータ以外も含む)
必須項目
コンポーネントを必須入力項目にするには setRequired() メソッドを使います。必須入力なテキストフィールドは使用頻度が高いので RequiredTextField というものが用意されています。デフォルトで setRequired(true) になっている TextField です。
なお必須項目を実現するのに Wicket 1.1 では RequiredValidator を使っていましたが 1.2 では deprecated になりました。
型の保証
コンポーネントの setType() により型を指定しておくことで、入力された値がある型に変換可能であることをチェックことができます。
(テキストフィールドを整数型に指定する)
TextField("amount").setType(Integer.class);
Wicket 1.1 で使っていた TypeValidator は deprecated となりました。数値の範囲
入力された数値が有効範囲に収まっていることをチェックするには NumberValidator を使います。NumberValidator のインスタンスは下記の 6 種類のクラスメソッドから取得します。
public static NumberValidator range(long minimum, long maximum) public static NumberValidator minimum(long minimum) public static NumberValidator maximum(long maximum) public static NumberValidator range(double minimum, double maximum) public static NumberValidator minimum(double minimum) public static NumberValidator maximum(double maximum)各メソッドには long (整数) バージョンと double (浮動小数点) バージョンがあり、setType で指定したフォームの型に応じて使い分けます。
正当な値の範囲はそれぞれ
- range 第 1 引数以上、第 2 引数以下
- minimum 引数以上
- maximum 引数以下
となっています。
(使用例: 3 以上の整数を受け付けるテキストフィールド)
new TextField("count").setType(Integer.class).add(NumberValidator.minimum(3))
文字列の長さ
文字列の長さをチェックするには StringValidator を使います。StringValidator のインスタンスは以下の 3 つのクラスメソッドから取得します。
public static StringValidator lengthBetween(int minimum, int maximum) public static StringValidator minimumLength(int minimum) public static StringValidator maximumLength(int maximum)それぞれ範囲、最小、最大の長さをチェックします。
日付の範囲
入力を日付とみなしてその範囲をチェックするには DataValidator を使います。DataValidator のインスタンスは以下の 3 種のクラスメソッドから取得します。
public static DateValidator range(Date minimum, Date maximum) public static DateValidator minimum(Date minimum) public static DateValidator maximum(Date maximum)それぞれ範囲、特定の日付の前後関係をチェックします。
正規表現へのマッチ
入力値が正規表現にマッチすることをチェックするには PatternValidator を使います。PatternValidator のインスタンスは以下のコンストラクタを使って new します。
public PatternValidator(final String pattern) public PatternValidator(final String pattern, final int flags) public PatternValidator(final Pattern pattern) public PatternValidator(final MetaPattern pattern)
メールアドレスへのマッチ
入力値がメールアドレスとして正しいことをチェックするには EmailAddressPatternValidator を使います。EmailAddressPatternValidator.getInstance() にてインスタンスを取得することができます。
メッセージの表示
エラーメッセージを表示するには FeedbackPanel を使います。
<div class="feedback" wicket:id="feedback"> エラー発生! </div>div タグの中身はダミーです。
add(new FeedbackPanel("feedback"));
表示するエラーメッセージは properties ファイルに登録します。(MyPage.properties)
messageForm.name.RequiredValidator='Name' field is requiredproperties ファイルの左辺は
<フォーム ID>.<コンポーネント ID>.<バリデータのクラス名>で、右辺にメッセージを書きます。コンポーネントがさらにネストしている場合はさらにドットを区切って書きます。
これでページ (に貼り付けられたコンポーネント) のエラーが FeedbackPanel に表示されます。
エラーのあるコンポーネントにマークをつける
FormComponentFeedbackBorder を使うとエラーがあったコンポーネントの右にアスタリスク '*' を表示することができます。
(マークアップファイル)
<div wicket:id="nameFeedback"> <input wicket:id="name" type="text"/> </div>(Java コード)
public MyForm() {
FormComponentFeedbackBorder nameFeedback
= new FormComponentFeedbackBorder("nameFeedback");
TextField nameField = new RequiredTextField("name");
nameFeedback.add(nameField);
add(nameFeedback);
}
背景を赤くしたいなど別の表示方法が必要な場合には IFeedback を実装したコンポーネントを自作するのがいいでしょう。エラー時の追加処理
検証に失敗した場合に特別な処理を行うには Form#onError() を実装します。
最新コメント