如何创建自定义验证器?

下面是一个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 = (Stringvalue;
 
        if (-== email.indexOf('@'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 = (EmailValidatorsuper.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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值