Wiki

Clone wiki

Oracle 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