在JSF中的校验器可以采用JSF自身的校验器,如果自身的校验器不能满足需要可以自定义校验器,其中系统自带的校验器如下:
import javax.faces.validator.LengthValidator; import javax.faces.validator.DoubleRangeValidator; import javax.faces.validator.LongRangeValidator;
无论是JSF类库自带的校验器还是自定义的校验器的必须实现相关的校验接口:
import javax.faces.validator.Validator;
下面讲解在JSF中可以自定义自己的校验器使用:
首先必须创建自定义的校验器类的如下:
package com.easyway.jsf.commons; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.Validator; import javax.faces.validator.Validator; import javax.faces.validator.ValidatorException; /*** * JSF自定义验证器的实现 * 必须实现Validator的接口 * public void validate(FacesContext fc, UIComponent uicom, Object obj) * throws ValidatorException; * * @author longgangbai * */ public class EmailValidator implements Validator{ private String pattern; public String getPattern() { return pattern; } public void setPattern(String pattern) { this.pattern = pattern; } /** * 添加一个校验器的方法 */ public void validate(FacesContext fc, UIComponent uicom, Object obj) throws ValidatorException { String email=(String)obj; //验证电子邮件的长度是否符合条件 String mymsg=(String)uicom.getAttributes().get("mymsg"); //获取当前页面中属性的信息 String emailpattern=(String)uicom.getAttributes().get("emailpattern"); if(emailpattern!=null){ pattern=emailpattern; } //添加一个FacesMessage 消息 if(email.length()<5){ FacesMessage message=new FacesMessage(FacesMessage.SEVERITY_ERROR,"电子邮件长度不足",mymsg); throw new ValidatorException(message); } if(pattern!=null&&!email.matches(pattern)){ FacesMessage message=new FacesMessage(FacesMessage.SEVERITY_ERROR,"电子邮件的格式不匹配","电子邮件的格式不匹配,请仔细检查"); throw new ValidatorException(message); } } }
在JSF的配置文件faces-config.xml中添加相关的JSF校验器配置信息:
<!-- JSF 校验器的配置 -->
<validator>
<validator-id>com.easyway.jsf.email</validator-id>
<validator-class>com.easyway.jsf.commons.EmailValidator</validator-class>
</validator>
JSF自定义校验器使用如下:
<!-- 校验器的使用 --> <h:outputLabel value="电子邮件:"></h:outputLabel> <h:inputSecret id="email" value="#{mathService.email}" required="true"> <f:validator validatorId="com.easyway.jsf.email" /> <f:attribute name="mymsg" value="电子邮件长度必须大于5个字符"/> <f:attribute name="emailpattern" value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" /> </h:inputSecret> <h:message for="email" ></h:message>
在Validator中获取标签的属性:f:attribute中的绑定的信息如下:
//验证电子邮件的长度是否符合条件 String mymsg=(String)uicom.getAttributes().get("mymsg"); //获取当前页面中属性的信息 String emailpattern=(String)uicom.getAttributes().get("emailpattern");