JavaServer Faces ユーザーズガイド
目次 前ページ次ページ

第3章 JavaServer Facesアプリケーションの開発

3.4 バリデータの作成

バリデータはjavax.faces.component.EditableValueHolderインタフェースを実装しているUIコンポーネントに対して任意個数を設定することが可能です。
バリデータを利用するには、すでに用意されている標準バリデータを利用する方法、メソッドバインディングの仕組みを利用する方法、ユーザによって作成されたカスタムバリデータを利用する方法があります。

■標準バリデータ

標準バリデータとして、次の3種類が用意されています。

・LengthValidator
入力値長をチェックするバリデータです。長さの最小値と最大値をチェックすることが可能です。

<f:validateLength minimum="5" maximum="9" />
・DoubleRangeValidator
入力値が数字の場合に、値の範囲をチェックするバリデータです。
最大値と最小値をチェックすることが可能で、数字はDoubleの範囲です。

<f:validateDoubleRange minimum="10.00" maximum="999.99" />
・LongRangeValidator
入力値が数字の場合に、値の範囲をチェックするバリデータです。
最大値と最小値をチェックすることが可能で、数字はLongの範囲です。

<f:validateLongRange minimum="10" maximum="1000" />

標準バリデータには対応するタグが用意されており、チェック対象のタグのコンテントに記述することで利用することができます。

<h:inputText value="#{myBean.message}">
  <f:validateLength minimum="5" maximum="9" />
</h:inputText>

■メソッドバインディングを利用したチェック

チェック対象のタグのvalidatorアトリビュートにmanaged beanのメソッドを記述ことができます。
ただし、バリデータとしては1つしか指定できないため、複数指定する場合は標準バリデータか、カスタムバリデータを利用する必要があります。

[JSPの例]
<h:inputText value="#{myBean.message}" validator="#{myBean.validate}" />
[バリデータの例]
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;

public class MyBean {
  ...
  public void validate(FacesContext context, UIComponent component, Object value){
    // 値のチェック処理を記述します。
    String text = (String)value;
    if(text.length() > 10){
      throw new ValidatorException(new FacesMessage("文字数が10を超えています"));
      
      // 以下の方法でも可能です。
      /*
      context.addMessage(component.getClientId(context),
      new FacesMessage("文字数が10を超えています"));
      ((UIInput)component).setValid(false);
      */
    }
  }
}

validatorアトリビュートで指定するメソッドの返却値はvoidにします。また、引数は上記の記述例のとおり3個であり、それぞれ以下の内容です。

チェックの結果、エラーが検出された場合は、上記の例のようにjavax.faces.application.FacesMessageクラスでエラーメッセージを作成することにより、画面に表示することができます。画面への表示方法は、メッセージの表示を参照してください。

カスタムバリデータ

任意のチェックロジックを実装したカスタムバリデータを作成することが可能です。
カスタムバリデータは、javax.faces.validator.Validatorインタフェースを実装して作成します。
以下はカスタムバリデータの例です。

[カスタムバリデータの例]
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;

public class MyValidator implements javax.faces.validator.Validator {
  public void validate(FacesContext context, UIComponent component, Object value)
                                                         throws ValidatorException {
    String text = (String)value;
    if(text.length() > 10){
      throw new ValidatorException(new FacesMessage("文字数が10を超えています"));
      // 以下の方法でも可
      /*
      context.addMessage(component.getClientId(context),
      new FacesMessage("文字数が10を超えています"));
      ((UIInput)component).setValid(false);
      */
    }
  }
}

チェックの結果、エラーが検出された場合は、上記の例のようにjavax.faces.application.FacesMessageクラスでエラーメッセージを作成することにより、画面に表示することができます。画面への表示方法は、メッセージの表示を参照してください。

作成したバリデータはJavaServer Faces定義ファイル(faces-config.xml)にバリデータIDを付けて登録します。以下の例ではmyValidatorというバリデータIDを付けています。

<faces-config>
  ...
  <validator>
    <validator-id>myValidator</validator-id>
    <validator-class>mypkg.MyValidator</validator-class>
  </validator>
  ...
</faces-config>

登録したバリデータは次のようにJSPで利用します。

<h:inputText value="#{myBean.message}">
  <f:validator validatorId="myValidator" />
</h:inputText>

目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2005