(转)
下面是一个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>