Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSF greater than zero validator

Tags:

jsf

jsf-2

How do you create a validator in JSF that validates the input text if it is greater than zero?

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

I have the code above but I am not sure if this is optimal. Although it works but if another number lesser than this is needed then I need to change the jsf file again. The use case is that anything that is greater than zero is okay but not negative number.

Any thoughts?

like image 732
Mark Estrada Avatar asked Aug 06 '13 03:08

Mark Estrada


1 Answers

Just create a custom validator, i.e. a class implementing javax.faces.validator.Validator, and annotate it with @FacesValidator("positiveNumberValidator").

Implement the validate() method like this:

@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); 
    }
}

And use it in the facelets page like this:

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

Useful link: http://www.mkyong.com/jsf2/custom-validator-in-jsf-2-0/

like image 181
perissf Avatar answered Sep 21 '22 12:09

perissf