如何创建自定义验证器?

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

你可能感兴趣的:(jsp,bean,xml,sun,vb)