5月 11th, 2008at 0:39
Tags: Java
JSF1.1 カスタムバリデータタグ
カスタムバリデータタグの作成に必要なのは以下のとおり。
- バリデータクラス作成
- 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 taglibPUBLIC "-//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>http://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>
ほーらできあがり。





