ひこぽんのーと

覚書と雑記です。

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へつづく。
f:id:nagamitsu1976:20150730160625p:plain