JSF Validator入門 - 標準Validator及びその使い方

2009/06/22 18:26Update
TAGS: JSF | Validator | バリデータ | チェック | 入力

JSFでは、バリデーションというユーザ入力値をチェックするための仕組みを提供しています。入力値が無効の場合、画面に再入力を促すメッセージを表示します。

ライフサイクルにおけるバリデーション・フェーズの役割


<<図>>


JSF Validatorの特徴


◇ サーバサイドで実行。JSF Validatorはサーバサイドで実行されます。
◇ コンポーネントとのバインド。一つのコンポーネントは複数のValidatorとバインドできます。
◇ バリデーションエラー時のエラーメッセージ処理。バリデーションエラー時、FacesContextにエラーメッセージを登録し、JSPにて表示します。
◇ バリデーションエラー時処理の自動中断。バリデーションエラー時、JSFのライフサイクルを中断し、Render Response Phaseにジャンプして処理終了します。
◇ JSFの標準Validator。JSFでは、数値(long, double)の最大・最小値チェック、文字列のレングス・チェック、必須チェックなどの標準Validatorが提供されています。
◇ Validatorのカスタマイズ。カスタムのValidator定義もできます。カスタムのValidatorは2種類があり、一つはMethod Validator(メソッド・レベルのバリデータ)、もう一つはjavax.faces.validator.Validatorを実装したクラスレベルのValidatorです。

JSF 標準Validator


■ validateDoubleRange
 入力値の範囲チェック。入力値は数値、もしくはDouble型の数値に変換できるものでなければなりません。
◇タグ:
    f:validateDoubleRange
◇属性:
    maximum="最大值"
    minimum="最小值"
◇Validator ID:
    javax.faces.DoubleRange
◇Validatorクラス:
    javax.faces.validator.DoubleRangeValidator

■ validateLongRange
 入力値の範囲チェック。入力値は数値、もしくはLong型の数値に変換できるものでなければなりません。
◇タグ:
    f:validateLongRange
◇属性:
    maximum="最大值"
    minimum="最小值"
◇Validator ID:
    javax.faces.LongRange
◇Validatorクラス:
    javax.faces.validator.LongRangeValidator

■ validateLength
 入力値の長さ(レングス)チェック。入力値は文字列、もしくは文字列型の値に変換できるものでなければなりません。
◇タグ:
    f:validateLength
◇属性:
    maximum="最大值"
    minimum="最小值"
◇Validator ID:
    javax.faces.Length
◇Validatorクラス:
    javax.faces.validator.LengthValidator

■ required Validator
required ValidatorはJSFタグに定義する必須チェックを行うためのバリデータです。

JSFでは、以下のタグにrequired属性をつけることで、必須チェックを行うことができます。
<h:inputHidden required="true/false"></h:inputHidden>
<h:inputSecret required=“true/false”></h:inputSecret>
<h:inputText required=“true/false”></h:inputText>
<h:inputTextarea required=“true/false”></h:inputTextarea>

<h:selectBooleanCheckbox required=“true/false”></h:selectBooleanCheckbox>
<h:selectManyCheckbox required=“true/false”></h:selectManyCheckbox>
<h:selectManyListbox required=“true/false”></h:selectManyListbox>
<h:selectManyMenu required=“true/false”></h:selectManyMenu>
<h:selectOneListbox required=“true/false”></h:selectOneListbox>
<h:selectOneMenu required=“true/false”></h:selectOneMenu>
<h:selectOneRadio required=“true/false”></h:selectOneRadio>

JSF Validatorの使用


■Method Validator(メソッドレベルのバリデータ)
JSP例:
<h:inputText value="#{mybean.someValue}" validator="#{mybean.validateXxxx}"/>

validator属性に#{mybean.validateXxxx}を指定することで、該当入力値はmybeanのvalidateXxxxメソッドにチェックされるようになります。

Java Managed Bean例:
public void validateXxxx(FacesContext context, 
        UIComponent component, Object value){

    String text = value.toString();
    if(!text.equals("xxxx")){
        throw new ValidatorException(new FacesMessage("some message"));
    }
}


メッセージ表示について、後ほど解説します。


■Validatorタグ
使い方例(JSP):
<h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">
    <f:validateDoubleRange maximum="5"></f:validateDoubleRange>
</h:inputText>
<h:message for="xxxxValue"></h:message>

※idはxxxxValueのテキストボックスの入力値の最大値は5に指定します。
※バリデータエラーの場合、<h:message />タグを使ってエラーメッセージを表示します。

■Validator ID
上の「JSF 標準Validator」節にて、Validator IDというものが書かれています。この「Validator ID」は何でしょう。
実は、<f:validator validatorId="ValidatorID" />という汎用的なバリデータタグがあり、validatorId属性に「Validator ID」を指定して、バリデーションを行うことができます。
※validatorIdはjavax.faces.validator.Validaotrを実装したクラスを指します。
※validatorIdはfaces-config.xmlにて登録する必要があります。
     <validator>  
         <validator-id>MyValidator</validator-id>
         <validator-class>com.mypackages.MyValidator</validator-class>
     </validator>

※<f:validator />タグはMethod Validatorと同様(他のJSF Validatorタグと違って)、パラメータを指定することはできません。

カスタムValidatorについて、他の記事にて解説したいと思います。

参考資料


JSF メッセージ処理 概要

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments