在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");