How can you create a custom validator and use it? See below!
Creating the custom validator class
package customvalidator; 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(value = "customValidatorId") public class CustomValidator implements Validator { @Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { String name = (String) value; if (name != null && !name.equals("Duke")) { throw new ValidatorException(new FacesMessage("Your name is not Duke!")); } } }
A sample managed bean using the custom validator.
package customvalidator; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; @ManagedBean(name = "customValidatorBean") @RequestScoped public class CustomValidatorBean { private Custom custom = new Custom(); public Custom getCustom() { return custom; } public void setCustom(Custom custom) { this.custom = custom; } }
The model object of the example.
package customvalidator; public class Custom { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
And the JSF page.
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>Custom Validator - f:validator tag</title> </h:head> <h:body> <h2>Custom Validator - f:validator tag</h2> <h:form> <h:inputText value="#{customValidatorBean.custom.name}"> <f:validator validatorId="customValidatorId"/> </h:inputText> <h:commandButton value="Submit"/> </h:form> </h:body> </html>
Posted November 11, 2013