Home > Struts > Validator プラグイン

Validator プラグイン

このエントリーは下書き扱いで。
サンプルなどは作成済みですが、整理に時間がかかるかな、と。
Validator プラグインについては、以下の記事で内容をつかめると思います。

@IT の記事
http://www.atmarkit.co.jp/fjava/rensai3/struts05/struts05_1.html

じゃあ、このエントリーいらないじゃん…て事になるんですけど、それはまぁ、自己理解用ということで。


入力データの妥当性チェック機能として、Struts では Validator プラグインが提供されています。
Validator では、XML ファイルとメッセージリソースファイル(プロパティファイル)の記述によって、チェックを行えるため、チェック用のソースコード(JavaScript 含む)を記述しなくて済みます。
ここでは、Validator の利用手順について説明します。

Validator は、以下の手順で使用することができます。

■準備

 ■commons-validator.jar、jakarta-oro.jar
  Validator プラグインが利用する JAR ファイルを WEB-INF/lib に配置します。
  配置する JAR ファイルは、commons-validator.jar と jakarta-oro.jar で、どちらも Struts としてダウンロードした中にに含まれています(lib フォルダ配下)。

 ■validator-rules.xml
  同じく Struts が提供する validator-rules.xml を WEB-INF に配置します(配置先は、struts-config.xml に定義するため、実際は WEB-INF 直下でなくても良い)。
  これは、Struts が標準提供する検証ルールを記述した XML ファイルです。

■Validator 対応
 各設定ファイルやクラスを Validator 対応させます。

 ■struts-config.xml
  まず、Struts 設定ファイルに Validator プラグインの使用記述を追加します。

  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
   <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  </plug-in>

  基本的に上のような記述を追加すれば OK です。
  set-property 要素の value 属性は、validator-rules.xml や後述の validation.xml の配置先になるので、それに応じて変更して下さい。
  また、使用するメッセージリソースファイルの定義も追加します。

  <message-resources parameter="MessageResources"/>

  メッセージリソースファイルについては、次で説明します。

 ■メッセージリソースファイル
  メッセージリソースファイルは Struts で使用するメッセージを定義した、いわゆるプロパティファイルです。
  Validator では「~が入力されていません」や「~には数値を入力してください」などの、エラーメッセージを使用します。
  エラーメッセージは、メッセージリソースファイルからキーによって取得するので、それを定義する必要があります。
  また、メッセージ取得時のキーは、validator-rules.xml で指定されているものを使用します。
  例えば、入力必須チェックを行う required に対応するエラーメッセージのキーは、errors.required となります。

 ■ValidatorForm
  Validator に対応する ActionForm として、ValidatorForm を継承したクラスを作成します。
  継承するだけで、後は通常の ActionForm と同様にフィールドと getter/setter を記述するだけで OK です。

 ■validation.xml
  入力フォームあるいは ActionForm のフィールドに対して、どのようなチェックを行うかを定義するのが、validation.xml です。
  XML ファイル名や配置先は struts-config.xml に正しく定義されていれば、任意のものでも構いません。

 ■JSP
  JSP にはクライアントでのチェック用 JavaScript 生成タグなどを記述します。

それでは、サンプルを例に具体的に手順を追っていきます。
サンプルは、ID とパスワードを入力するログイン画面風のものになっています。
ID とパスワードは、どちらも必須入力として Validator の設定を行っています。
ログインボタンをクリックした時に、入力されていないと、エラーメッセージが表示されます。
JavaScript が実行されない場合でも、サーバ側でチェックを行い、画面上部にエラーメッセージを表示させます。
ID とパスワードの両方に何らかの入力がある状態で、ログインボタンをクリックしても、特に何も起こりません(設定上は、同じページ= login.jsp に遷移するようになっています)。

Struts設定ファイルは以下のように記述します。

<?xml version="1.0"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
 <form-beans>
  <form-bean name="login" type="com.shunmi.struts.login.LoginForm"/>
 </form-beans>
 <action-mappings>
  <action path="/login" name="login" type="org.apache.struts.actions.ForwardAction" parameter="/login.jsp" validate="true" input="/login.jsp"/>
 </action-mappings>
 <message-resources parameter="MessageResources"/>
 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
 </plug-in>
</struts-config>

サンプル用の ActionForm として com.shunmi.struts.login.LoginForm を論理名 login で定義します。
Action は指定先にフォワードするだけの org.apache.struts.actions.ForwardAction を使用します。
ForwardAction を使用した場合は、RequestProcessor が直接フォワードするので、action 要素の属性 parameter にフォワード先(サンプルの場合は login.jsp)を指定します。
action 要素の属性 validate はサーバ側でのチェックを行う際に true を指定します(クライアントで JavaScript が無効な場合でも、サーバ側でチェックできます)。
同じく、属性 input はサーバ側のチェックでエラーが返された場合のフォワード先を指定します。
また、メッセージリソースファイルとして MessageResources という名前のファイルの使用を記述します。
そして、Validator プラグインの使用および、Validator 設定ファイルとして、WEB-INF 配下の validator-rules.xml と validation.xml を使用することを記述します。

メッセージリソースファイルは、上記 Struts 設定ファイルで定義したファイル名で作成します。
つまり、MessageResources です。
プロパティファイルとして読み込むので、MessageResources.properties として、WEB-INF/classes 配下に置くのが良いでしょう。
今回は Strutsが標準提供する必須入力チェック required のみ使用するので、以下のような内容を記述しておけば OK です。

errors.required={0}が入力されていません。
string.id=ID
string.password=パスワード

ActionForm として、org.apache.struts.validator.ValidatorForm を継承した LoginForm というクラスを用意します。
クラス LoginForm には、String 型のフィールド id と password を宣言し、それぞれに対応する getter/setter メソッドを用意します。

validation.xml には、LoginForm の id と password に適用する required チェックに関する設定を記述をします。

<?xml version="1.0" ?>
<!DOCTYPE form-validation PUBLIC
 "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
 "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
 <formset>
  <form name="login">
   <field property="id" depends="required">
    <arg key="string.id" position="0"/>
   </field>
   <field property="password" depends="required">
    <arg key="string.password" position="0"/>
   </field>
  </form>
 </formset>
</form-validation>

まず、form 要素の属性 name に Struts 設定ファイルで定義した LoginForm の論理名 login を指定します。
form の子要素 field の属性に LoginForm のフィールド名、depends 属性に requierd を指定することで、該当フィールドに対して必須入力チェックが行われます。
field の子要素 arg にはエラーメッセージに埋め込む文字列について記述します。
属性 key はメッセージリソースファイルから文字列を取得する際のキーを指定します(サンプルではキー string.id で、文字列 ID が取得されます)。
属性 position では、key で取得した文字列を埋め込む位置を指定します。
required はデフォルトで、errors.required をキーにエラーメッセージを取得するので、position に 0 を指定することで、サンプルでは、"{0}が入力されていません"の{0}の位置にkeyで取得した文字列が埋め込まれます。
つまり、フィールド ID が未入力の場合のエラーメッセージは"IDが入力されていません"となります。

login.jsp です(説明用にタグをいくつか省略しています)。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="struts-html" prefix="html" %>
<html:html>
 <html:javascript formName="login"/>
  <html:errors/>
  <html:form method="POST" action="/login" onsubmit="validateLogin(this)">
   <html:text property="id"/>
   <html:password property="password"/>
   <html:submit value="ログイン"/>
  </html:form>
</html:html>

html:javascriptタグにより、フォームチェック用の JavaScript が生成されます。
属性 formName には ActionFormの論理名を記述します。
以上を記述することで、"validate" + 対象 ActionForm の論理名という名前で、フォームを引数とする JavaScript 関数が自動生成されます。
サンプルでは、validateLogin(Form) となります。
サンプルの様に対象 ActionForm の論理名の先頭が小文字の場合は、大文字として下さい。
validatelogin では動作しません。
この関数をフォーム内容送信前に実行させるために、html:form タグの属性 onSubmit に"return validateLogin(this)"と記述します(return を忘れずに)。
引数の this はフォーム自身ということになります。
html:errors タグの部分には、サーバ側のチェックでエラーになった場合に、エラーメッセージが埋め込まれます。

Home > Struts > Validator プラグイン

Page Top