JavaEE 7をやってみよう。 validator その3
その2のつづき。
Managed Beanにバリデータメソッドを追加する場合。
これは単純。
Managed Beanにバリデータメソッドを追加して、
JSF側から呼びだせば良いわけだ。
package manage; import javax.enterprise.context.RequestScoped; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.ValidatorException; import javax.inject.Named; @Named(value="inputDataV") @RequestScoped public class InputValidateData { private String text1; private String text2; private Integer text3; private Double text4; private String text5; private String text6; ~~~ アクセサメソッドは省略してます。ホントはあるんですっ!~~~~~ public void validaitonText5(FacesContext fc, UIComponent uic, Object value) { String input = (String)value; if ( input == null || input.equals("") ) { throw new ValidatorException(new FacesMessage("必須入力です")); } if ( input.length() >= 16 ) { throw new ValidatorException(new FacesMessage("15文字以内です")); } } }
バリデータクラスと同じシグネチャさえ持っていれば、
メソッド名は何でもOK。
して、呼び出し側はこのようにする。
<h:outputLabel value="ManagedBean Validator" /><br /> <h:inputText id="text5" value="#{inputDataV.text5}" validator="#{inputDataV.validaitonText5}" > <f:ajax render="text5error" /> </h:inputText> <h:message for="text5" id="text5error" style="color: red" />
バリデータクラスの時と同じようにvalidtor属性にManaged Beanのバリデータメソッドを書けば良い。
実行するとこんな感じ。
Message Resource その1へつづく。