このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
Struts Validator は、Struts の中核として、
struts-core ライブラリに含まれているのだが、
Validator の検証機能を実際に使うためには、
いくつかのライブラリを lib に追加する必要がある。
・commons-validator-1.3.0.jar
・oro-2.0.8.jar
これらは struts-1.3.5 と一緒に配布されているので、
/WEB-INF/lib にコピーしておくこと。
commons-validator は検証機能を持つ汎用ライブラリ、
oro は、Perl や AWK の正規表現のライブラリだ。
oro は必須ではないが、今回は利用するので追加する。
commons-validator は、XML で記述したルールを使い、
文字列が適合するかどうかを検証する機能を持つ。
このフレームワークは非常に汎用的に作られており、
XML には多彩な記述が可能となっている
Struts Validator はこれを使って値の検証を行い、
検証結果を ActionMessages に統合する機能を持っている。
ValidatorForm は Validator の代表的なクラスで、
ValidatorForm クラスを基底として使うと、
自身の検証用の validate() メソッドを、
XML ファイルを使って自動的に行う ActionForm となる。
つまり、validate メソッドに一切コードを書くことなく、
ActionForm に対して自動的な検証を行うことができるのだ。
さて、この機能を使う場合、以下の準備が必要となる。
1. 検証機能や検証内容を定義した XML ファイルを作る
2. Struts 設定ファイルに XML ファイルを登録する。
3. 検証を行う Bean を ValidatorForm から派生させる。
順に見ていこう。
まず、XML ファイルだ。これが心臓部なので一番ややこしい。
とりあえず、空の XML を用意しておこう。
場所は、/WEB-INF/validation.xml とするのが一般的だ。
========== /WEB-INF/validation.xml ==========
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<form-validation>
</form-validation>
========== end of /WEB-INF/validation.xml ==========
次に、Struts 設定ファイルへの登録。
Struts Validator はプラグインという形で実装されており、
Struts 設定ファイルの <plug-in> 要素で指定することで、
ActionServlet の起動と同時に読み込まれて有効化される。
========== /WEB-INF/struts-config.xml ==========
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
(…省略…)
</form-beans>
<action-mappings>
(…省略…)
</action-mappings>
<message-resources
parameter="jp.loafer.test.resources.Messages" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="
/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml
" />
</plug-in>
</struts-config>
========== end of /WEB-INF/struts-config.xml ==========
<plug-in> 要素は、<struts-config> の直下で、
厳密な順番が決まっているため、最後の部分となる。
className 属性にはプラグインを提供する FQCN を書く。
Struts Validator の場合、ValidatorPlugIn クラスだ。
このクラスは、Struts の core ライブラリにあるのだが、
プラグインなので、<plug-in> で指定しないと使われない。
<set-property> 要素はプラグイン固有のパラメータを示す。
ValidatorPlugIn では、pathnames プロパティが必須で、
その値として、XML のパスをカンマ区切りで指定する。
通常、Struts Validator 自身が定義している XMLと、
開発者自身が定義する XML の 2 つを使用するが、
XML ファイルはいくつでも指定可能だ。
Struts Validator 自身が定義している検証ルールは、
Struts の core ライブラリの内部にリソースとして含まれ、
org.apache.struts.validator.validator-rules.xml にある。
これをリソースとして読み込めるように、
パッケージ区切りを / に変更した以下のパスを指定する。
/org/apache/struts/validator/validator-rules.xml
このリソースには、検証を行うクラスの参照が
定義されているので必ず取り込んでおく必要がある。
/WEB-INF/validation.xml は、
これから作りこんでいく XML ファイルだ。
そして、最後に、ValidatorForm からの派生だ。
これは非常に簡単である。
========== FilterRuleForm.java ==========
package jp.loafer.test.forms;
import javax.servlet.http.HttpServletRequest;
import jp.loafer.test.beans.FilterRule;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.ValidatorForm;
public class FilterRuleForm extends ValidatorForm {
(…省略…)
}
========== end of FilterRuleForm.java ==========
ActionForm が ValidatorForm になっただけだ。
これで基本的な準備は整った。
まだ XML ファイルが空なので何の検証も行われない。