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