DATE : 2006/11/10 (Fri)
JSF には、ユーザが入力フィールドなどに入力した内容を検証できる Validator があります。例えば、javax.faces.validator.LengthValidator は、入力された文字数が一定の範囲内にあるか検証できますし、org.apache.myfaces.custom.emailvalidator.EmailValidator は入力された文字列がメールアドレスの形式になっているか否かを検証できます。また、javax.faces.validator.Validator インタフェースを実装することで、自分なりの Validator を作ることもできます(他にも、検証を行うメソッドを直接記述する Validator もあります)。
インタフェースを実装した Validator は、JSF の設定ファイルである faces-config.xml に登録すると使えるようになります。例えば、以下は project.jsf.MyValidator を myValidator として登録した部分です。
<validator> <validator-id>myValidator</validator-id> <validator-class>project.jsf.MyValidator</validator-class> </validator>
こうして登録した Validator を入力フィールドで使用するには、次のようにします。以下は、入力フィールドに入力された文字列を myValidator が検証し、合格であれば myBean の value プロパティに文字列を設定する部分です。不合格の場合は、入力フィールドに続いてエラーメッセージが表示されます(h:message タグの部分になります)。
<h:inputText id ="textField" value="#{myBean.value}"> <f:validator validatorId="myValidator" /> </h:inputText> <h:message for="textField" />
しかし、Validator の使用には注意が必要です。入力フィールドが空値の場合、Validator は実行されません。つまり、空値の場合は空値がそのまま myBean の value プロパティに設定されてしまいます。
実は、入力フィールドなどの入力を求める部分に文字列があるかを検証する方法は、別に用意されています。
それは required 属性で、この属性を true に設定すると、入力を必須にすることができます。
上の例では、次のようになります。
<h:inputText id ="textField" value="#{myBean.value}" required="true"> <f:validator validatorId="myValidator" /> </h:inputText> <h:message for="textField" />
Validator 同様、h:message タグの部分にエラーメッセージが表示されます。
すると、Validator では空値を検証する必要がないとも言えます。
(;^ω^)これにはそうとう長期間苦しめられました
参考文献
- Java EE 5 Tutorial - Adding UI Components to a Page Using the HTML Component Tags - Using Text Components
- Java Server Faces Developer Forums "Validating empty input"