ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 validator その2

その1のつづき。

自作のバリデータクラスを使う方法について。
バリデータクラスを作るには、
javax.faces.validator.FacesValidator;
を実装したクラスを作成すればよい。
そして、@FacesValidatorアノテーションを付け、
名前を決めてあげれば良い。
こんな感じに。

package validator;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("simpleTextValidator")
public class SimpleTextValidator implements Validator {
    public SimpleTextValidator() {
    }
    
    @Override
    public void validate(FacesContext fc, UIComponent uic, Object value)
            throws ValidatorException {
        String input = (String)value;
        if ( input == null || input.equals("") ) {
            throw new ValidatorException(new FacesMessage("必須入力です"));
        }
        if ( input.length() >= 16 ) {
            throw new ValidatorException(new FacesMessage("15文字以内です"));
        }
    }

}

Validatorインターフェイスがもつ、validateメソッドを実装してやればよい。
valueには、検査するオブジェクトが入ってくる。(大抵Stringだろう)
あとは好きにチェックロジックを書けばよいわけだ。

呼び出し側としては、@FacesValidatorアノテーションで付けた名前を、
チェック対象タグのvalidator属性に指定すれば良い。
チェック実行とエラーメッセージの描画については、validatorタグと一緒だ。

<h:outputLabel value="Use Validator Class" /><br />
    <h:inputText id="text6" value="#{inputDataV.text6}" validator="simpleTextValidator" >
        <f:ajax render="text6error" />
    </h:inputText>
<h:message for="text6" id="text6error" style="color: red" />

実行結果はこんな感じ。
その3へつづく。

f:id:nagamitsu1976:20150730154848p:plain