カスタムJSFバリデータについて

JSF標準バリデータでは、数値範囲および文字列長に関する一般的な検証チェックが提供されます。さらに複雑な検証規則およびチェックが必要な場合は、javax.faces.validator.Validatorインタフェースを実装するか、またはカスタム検証を実行するBeanメソッドを作成して、独自の検証コードを実装できます。検証に失敗した場合は、エラー・メッセージを表示します。

バリデータ・インタフェースの実装

Validatorインタフェースの実装方法については、このトピックでは詳しく説明しません。簡単に説明すると、カスタム実装では、メソッドを定義して、Validatorインタフェースのvalidateメソッドをオーバーライドします。javax.faces.validator.ValidatorExceptionを使用して適切な例外をスローし、javax.faces.application.FacesMessageを使用して対応するエラー・メッセージを生成します。ValidatorインタフェースおよびFacesMessageの詳細は、javax.faces.validator.Validatorおよびjavax.faces.application.FacesMessageに関するJavadocを参照するか、またはjava.sun.comのWebページ http://java.sun.com/j2ee/javaserverfaces/にアクセスしてください。

アプリケーションで状態をクライアントに保存する場合は、カスタム・バリデータ実装がシリアライズ可能であるか、またはStateHolderと、StateHoldersaveState(FacesContext)メソッドおよびrestoreState(FacesContext, Object)メソッドも実装する必要があります。詳細は、javax.faces.componentStateHolderインタフェースに関するJavadocを参照してください。

Validatorインタフェースを実装するときに、コンポーネントにバリデータを登録するためのカスタム・タグを作成するか作成しないかを選択できます。カスタム・タグを作成する場合は、タグの任意の属性に対する一連のアクセッサ・メソッドを実装に提供します。次に、JSFページで、カスタム・タグ属性を使用してバリデータのプロパティを構成します。たとえば、従業員番号入力フィールドに設定できる書式パターンをページ作成者が指定できるようにするとします。

<h:inputText id="empnumber" required="true">
  <hdemo:emValidator emPatterns="9999|9 9 9 9|9-9-9-9" />
</h:inputText>
<h:message styleClass="vMsg" for="empnumber"/>    
<af:inputText required="true"
              secret="true" 
							 label="Enter your password:"
							 tip="some tip">
  <afdemo:validatePassword pwPatterns=" ..." />
</af:inputText>    

カスタム・タグを作成しない場合は、バリデータ・プロパティを実装に定義する必要があります。次に、JSFページで、f:validatorまたはaf:validatorタグを使用して、コンポーネント内にカスタム・バリデータをネストします。次に例を示します。

<h:inputText id="empnum" value="#{MyBean.enum}" size="5" ... >
  <f:validator validatorId="customValidator" />
  <f:attribute name="someName" value="someValue" />
</h:inputText>
<h:message styleClass="vMsg" for="empnum"/>    

要約すると、アプリケーションでカスタム・バリデータを(カスタム・タグを使用してまたは使用せずに)使用するには、次の処理を実行する必要があります。

Beanメソッドの作成

検証を実行するためにBeanメソッドを作成する方法は、特定のアプリケーション内で使用するカスタム・バリデータを提供する方法として適しています。これは、メソッドではクラスのその他のインスタンス・フィールドにアクセスできるためです。

Validatorインタフェースのvalidateメソッドと同様に、Beanメソッドでは、検証対象のデータを含むFacesContext、UIComponentまたはUIXComponent、および検証対象のデータを受け入れる必要があります。コンポーネントで検証Beanメソッドを使用するには、コンポーネントのvalidator属性を使用して、メソッド・バインディング式を介してメソッドを参照します。

エラー・メッセージの作成

エラー・メッセージは通常、リソース・バンドルに格納されます。検証に失敗すると、通常は、FacesContextインスタンスのメッセージをプログラムによってキューイングします。「カスタムJSFコンバータおよびバリデータに対するエラー・メッセージについて」を参照してください。


アプリケーションへのカスタムのコンバータまたはバリデータの登録
コンポーネントへのカスタム・バリデータ・インスタンスの登録
コンポーネントへの既存バリデータ・メソッドの登録