カスタムバリデータタグの作成に必要なのは以下のとおり。
- バリデータクラス作成
- faces-config.xmlへ登録
- カスタムタグクラス作成
- TLDファイル作成
- JSPで利用
バリデータクラスの作成
今回は正規表現でチェックするバリデータを作ってみました。
package com.daipresents.kingdom.validator;
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;
/**
* 正規表現チェックパリデータクラス
*
* @author Dai Fujihara
*
* 2005/12/12 10:22:33
*/
public class RegExpValidator implements Validator {
/** 属性pattern 正規表現が設定されます */
private String pattern;
/**
* 正規表現で書式チェックを行います。
*/
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
String text = value.toString();
if(!text.matches(pattern)){
throw new ValidatorException(new FacesMessage("書式が違います。"));
}
}
/**
* 正規表現文字列を設定します。
* @param pattern
*/
public void setPattern(String pattern){
this.pattern = pattern;
}
}
faces-config.xmlへ登録
作ったバリデータクラスを登録します。
<validator> <validator-id>RegExpValidator</validator-id> <validator-class> com.daipresents.kingdom.validator.RegExpValidator </validator-class> <attribute> <attribute-name>pattern</attribute-name> <attribute-class>java.lang.String</attribute-class> </attribute> </validator>
カスタムタグクラス
カスタムバリデータを使用するTaglibを作成します。
jsf-impl.jarをみると、「com.sun.faces.taglib」以下にある「html_basicフォルダ」、「jsf_coreフォルダ」にタグクラスを配置している。
package com.daipresents.kingdom.taglib;
import javax.faces.validator.Validator;
import javax.faces.webapp.ValidatorTag;
import javax.servlet.jsp.JspException;
import com.daipresents.kingdom.validator.RegExpValidator;
/**
* 正規表現チェックバリデータカスタムタグ。
*
* @author Dai Fujihara
*
* 2005/12/12 10:18:36
*/
public class RegExpValidatorTag extends ValidatorTag{
/** 正規表現文字列 */
private String pattern;
/** コンストラクタ */
public RegExpValidatorTag(){
setValidatorId("RegExpValidator");
}
protected Validator createValidator() throws JspException {
//RegExpValidator validator = new RegExpValidator();
RegExpValidator validator = (RegExpValidator)super.createValidator();
validator.setPattern(pattern);
return validator;
}
/**
* 正規表現文字列を取得します。
* @return 正規表現文字列
*/
public String getPattern() {
return pattern;
}
/**
* 正規表現文字列を設定します。
* @param pattern
*/
public void setPattern(String pattern) {
this.pattern = pattern;
}
}
TLDファイル
Taglibを使えるように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> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>kd</short-name> <uri>//daipresents.com/</uri> <description> kingdom taglib. </description> <tag> <name>validateRegExp</name> <tag-class>com.daipresents.kingdom.taglib.RegExpValidatorTag</tag-class> <attribute> <name>pattern</name> <required>true</required> </attribute> </tag> </taglib>
JSPの書き方
まずは作成したタグリブを教えてあげるためにJSPの上のほうに以下を記述します。
<%@ taglib uri="../WEB-INF/kingdom.tld" prefix="kd" %>
これで実際に使えるようになったので使ってみましょう。
<h:outputText value="ユーザID" />
<h:inputText value="#{Login.userID}">
<kd:validateRegExp pattern="[a-zA-Z]"/>
</h:inputText>

ほーらできあがり。