Wiki
Clone wikiOracle JSF Expert 1Z0-896 / Custom validators
Custom validators
javax.faces.validator.Validator interface
public interface Validator { public void validate(FacesContext context, UIComponent component, Object value); }
Creating custom CDI validators
@Named("userIsPaulValidator") public class UserValidator implements Validator { @Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (!"paul".equalsIgnoreCase(value)) { FacesMessage msg = new FacesMessage("User validator failed", "Invalid user"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } }
<h:inputText value="#{userBean.name}"> <f:validator binding="#{userIsPaulValidator}" /> </h:inputText>
Creating custom validators with @FacesValidator
@FacesValidator("userIsPaulValidator") public class UserValidator implements Validator { @Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (!"paul".equalsIgnoreCase(value)) { FacesMessage msg = new FacesMessage("User validator failed", "Invalid user"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } }
<h:inputText value="#{userBean.name}"> <f:validator validatorId="#{userIsPaulValidator}" /> </h:inputText>
Creating custom validators with faces-config.xml
public class UserValidator implements Validator { @Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (!"paul".equalsIgnoreCase(value)) { FacesMessage msg = new FacesMessage("User validator failed", "Invalid user"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } }
<validator> <validator-id>userIsPaulValidator</validator-id> <validator-class>com.example.UserValidator</validator-class> </validator>
<h:inputText value="#{userBean.name}"> <f:validator validatorId="#{userIsPaulValidator}" /> </h:inputText>
Creating custom validator methods
@Named public class User { private String name; public void validateName(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (!"paul".equalsIgnoreCase(value)) { FacesMessage msg = new FacesMessage("User validator failed", "Invalid user"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } }
<h:inputText value="#{user.name}" validator="#{user.validateName}" />
Overriding messages coming from validator
<h:inputText value="#{user.name}" validator="#{user.validateName}" validatorMessage="OI You aren't Paul!" />
Updated