8

入力テキストがゼロより大きい場合に検証するバリデーターを JSF で作成するにはどうすればよいですか?

<h:inputText id="percentage" value="#{lab.percentage}">
    <f:validateDoubleRange minimum="0.000000001"/>
</h:inputText>

上記のコードがありますが、これが最適かどうかはわかりません。それは機能しますが、これよりも小さい別の数が必要な場合は、jsf ファイルを再度変更する必要があります。ユースケースは、ゼロより大きいものは何でも問題ありませんが、負の数ではないということです。

何かご意見は?

4

1 に答える 1

6

カスタムバリデータ、つまり を実装するクラスを作成しjavax.faces.validator.Validator、 で注釈を付けるだけ@FacesValidator("positiveNumberValidator")です。

validate()次のようにメソッドを実装します。

@Override
public void validate(FacesContext context, UIComponent component,
        Object value) throws ValidatorException {

    try {
        if (new BigDecimal(value.toString()).signum() < 1) {
            FacesMessage msg = new FacesMessage("Validation failed.", 
                    "Number must be strictly positive");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(msg); 
        } 
    } catch (NumberFormatException ex) {
        FacesMessage msg = new FacesMessage("Validation failed.", "Not a number");
        msg.setSeverity(FacesMessage.SEVERITY_ERROR);
        throw new ValidatorException(msg); 
    }
}

そして、facelets ページで次のように使用します。

<h:inputText id="percentage" value="#{lab.percentage}">
    <f:validator validatorId="positiveNumberValidator" />
</h:inputText>

便利なリンク: http://www.mkyong.com/jsf2/custom-validator-in-jsf-2-0/

于 2013-08-07T08:41:53.253 に答える