(轉)
下面是一個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>