下面是一个email验证器的示例:
EmailValidator.java:
import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.Validator; import javax.faces.validator.ValidatorException; public class EmailValidator implements Validator { private String errorMessage = null; public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } public void validate(FacesContext context, UIComponent component, Object value) { if (null == value) { return; } String email = (String) value; if (-1 == email.indexOf('@', 1) || -1 == email.indexOf('.')) { if (errorMessage != null) { throw new ValidatorException(new FacesMessage(Tags.eval(errorMessage))); } else { // use default validator message throw new ValidatorException(null); } } } } |
Tags.java:
import javax.faces.application.Application; import javax.faces.component.UIComponent; import javax.faces.component.UIInput; import javax.faces.context.FacesContext; import javax.faces.el.MethodBinding; import javax.faces.el.ValueBinding; import javax.faces.event.ValueChangeEvent; import javax.faces.webapp.ConverterTag; import javax.faces.webapp.UIComponentTag; public class Tags { // Converter Tags and Validator Tags helper methods public static String eval(String expression) { if (expression != null && UIComponentTag.isValueReference(expression)) { FacesContext context = FacesContext.getCurrentInstance(); Application app = context.getApplication(); ValueBinding vb = app.createValueBinding(expression); return "" + vb.getValue(context); } else { return expression; } } } |
EmailValidatorTag.java:
import javax.faces.component.UIComponent; import javax.faces.validator.Validator; import javax.faces.webapp.ValidatorTag; import javax.servlet.jsp.JspException; public class EmailValidatorTag extends ValidatorTag { private String errorMessage = null; public EmailValidatorTag() { setValidatorId("Email"); } public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } public Validator createValidator() throws JspException { EmailValidator validator = (EmailValidator) super.createValidator(); validator.setErrorMessage(errorMessage); return validator; } public void release() { errorMessage = null; } } |
faces-config.xml:
<validator> <validator-id>Email</validator-id> <validator-class>EmailValidator</validator-class> </validator>
mytags.tld:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.2</jspversion> <shortname>mytags</shortname> <uri>mytags</uri> <tag> <name>validateEmail</name> <tagclass>EmailValidatorTag</tagclass> <attribute> <name>errorMessage</name> <description>message if a validation error occurs</description> </attribute> </tag> </taglib>
mypage.jsp:
<h:inputText id="email" required="true"> <mytags:validateEmail errorMessage="#{bean.message}"/> </h:inputText>