|
JSF(Java Server Faces)のカスタムバリデータ |
カスタムバリデータを作るのは作業が多く、結構大変です。
- バリデータのクラス(***Validator.java)を作る。
- バリデータのカスタムタグのクラス(***ValidatorTag.java)を作る。
- faces-config.xmlに、バリデータのクラスを記述する。
<validator>
<validator-id>int</validator-id>
<validator-class>stncl02.validator.IntValidator</validator-class>
<attribute>
<attribute-name>errorMessage</attribute-name><attribute-class>java.lang.String</attribute-class>
</attribute>
<attribute>
<attribute-name>key</attribute-name><attribute-class>java.lang.String</attribute-class>
</attribute>
<attribute>
<attribute-name>itemLabel</attribute-name><attribute-class>java.lang.String</attribute-class>
</attribute>
</validator>
|
- カスタムタグのクラスを書いたTLD(タグライブラリディスクリプタ)ファイルを作り、
WEB-INFに配置する。
<?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>validator-extend</shortname>
<uri>validator-extend</uri>
<tag>
<name>validateInt</name>
<tag-class>stncl02.validator.IntValidatorTag</tag-class>
<attribute>
<name>errorMessage</name><required>false</required>
</attribute>
<attribute>
<name>key</name><required>false</required>
</attribute>
<attribute>
<name>itemLabel</name><required>false</required>
</attribute>
</tag>
</taglib>
|
-
各JSPの冒頭では、上記のTLDを参照するtaglibディレクティブを記述する。
<%@ taglib uri="/WEB-INF/validator-extend.tld" prefix="mmm" %>
|
こんな感じです。実際のクラスについてもいずれメモすることにします。
それで何でもStrutsと比べるのはいささかいかがかと思いますが、
気になる木になる点
-
1個のバリデーションにつきクラスを2個ずつ書かないといけないのはかったるく、保守性が悪い。
-
エラーメッセージの生成方法について、もう少し高レベルでフレームワーク化してほしい
(MessageFormatでFormatするところまで自分で書かないといけないのは??)
-
requiredだけがUIコンポーネントの属性になっているのが少し気持ち悪い。
です。
(first uploaded 2006/04/16 last updated 2006/04/16, URANO398)
|