バリデーターを使う
バリデーターは、値の検査をするためのものです。値が、あらかじめ指定された条件に合致するように入力されているかどうかを調べ、正しく入力されている場合にのみ処理を実行させます。コンバーターは値を決まった種類に変換するのに対し、バリデーターはもっと細かな条件に基づいて値を精査します。
では、これも実際に例を作りながら説明していきましょう。まず、バリデーターをfaces-config.xmlに登録します。先ほどのコンバーターと同じように、以下のタグを追記してください。
<validator>
<validator-id>range_vali</validator-id>
<validator-class>javax.faces.validator.LongRangeValidator</validator-class>
</validator>
バリデーターは、このように<validator>タグを使って登録します。この中に、<validator-id>タグと<validator-class>を用意し、それぞれID名と使用クラスを指定します。このあたりは、コンバーターの場合と同じですね。
ここで利用している「LongRangeValidator」というクラスは、あらかじめ指定した範囲内の整数が入力されているかチェックするものです。最小値と最大値を属性として指定し、その範囲内の値だけが入力されるようにします。
続いて、JSPのフォームでバリデーターを登録します。ここでは、前回コンバーターのサンプルとして作成したものをそのまま引き継ぐことにしましょう。
<f:view>
<h:outputText value="JSF Page 1" id="text0"
style="color: #0000AA; font-size: 18px; font-weight: bold" />
<br /><br />
<h:outputText value="これは、JSFによる表示です。" id="text1"
binding="#{page1Bean.text1}" escape="false" />
<h:form>
<h:inputText binding="#{page1Bean.field1}" converter="int_conv">
<f:validator validatorId="range_vali"/>
<f:validateLongRange minimum="10" maximum="100" />
</h:inputText>
<h:commandButton value="送信" action="#{page1Bean.button1_action}" />
</h:form>
</f:view>
管理Beanの処理は変わりありません。ここでは、<h:inputText>タグの中に、<f:validator>タグというのが追記されています。これが、バリデーターの設定を行うためのタグです。(実をいえば、<h:inputText>タグにはコンバーターと同じようにバリデーターを設定する「validator」という属性もあるのですが、この属性では細かな設定が行えません。今回利用しているバリデーターは、値の範囲に関する設定が必要なので、別途タグを使って記述をしています)
この<f:validator>タグの中には、<f:validateLongRange>というタグが書かれています。これは、ここで使っているLongRangeValidatorで必要になる属性を用意するためのものです。ここで、minimumとmaximumで最小値、最大値を指定します。バリデーターは、このLongRangeValidatorのように、チェックのために各種の設定値を必要とするものがあります。こうしたものでは、このように必要な値を用意してやらなければうまく動きません。