4月 7th, 2008at 12:32

Tags: ,

Struts1.3.5でValidatorを使う

StrutsではValidate機能が付いている。

Validatorは以下のチェックができる。

  • クライアントサイドのエラーチェック
  • サーバーサイドのエラーチェック

クライアントサイドではJavascriptを用いてチェックする。クライアントサイドJavascriptチェックを使うと、サーバ間通信が減るので、パフォーマンスを抑えることができる。(多少だと思うけど

サーバーサイドチェックはActionクラス内でチェックする。また、独自のチェックを内部チェックに加えることも可能。

Validatorを使うか使わないかは設定でかえることができる。

インストール 

struts-config.xmlに以下を追加。

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

あとはvalidation.xmlを書いてあげる。

サーバーサイドチェックを使う 

手順は以下。

  • ActionFormを作成
  • 作ったフォームにあわせてvalidation.xmlを記入する
  • struts-config.xmlからvalidatorを有効にする

struts-config.xmlからvalidatorを有効にする 

struts-config.xmlのAction要素でvalidateを有効(true)にする。

<action path="/TestAction"           type="com.daipresetns.TestAction"           name="TestForm"           scope="session"           validate="true"           input="エラーのときに遷移するページ">

ActionFormでオリジナルのエラーチェックを入れる 

ActionFormでvalidate
メソッドをオーバーライドすると、狙ってvalidatorを動かすことができる。StrutsのValidatorはvalidateメソッドが自動的
に呼ばれるということ。オーバーライドして各自実装すれば、validatorで定義されていないチェック(重複チェックなど)を行うことが可能。

@Overridepublic ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {

   ActionErrors errors = super.validate(mapping,request);

   //TODO その他チェックがあればここに記述   if(getPassword() != null){       if(!getPassword().equals(getConfirmPassword())){           //パスワードが異なる           errors.add(ActionMessages.GLOBAL_MESSAGE,                       new ActionMessage("errors.9999"));       }   }   return errors;}

Actionで発生したエラーの対処をする 

Actionで発生したエラーに対応するエラーメッセージを設定する。

ActionMessages errors = new ActionMessages();errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.0001"));saveErrors(req, errors);

ActionMessageにはリソースのキーを与える。リソースに引数を与える場合は

ActionMessage(key, arg0)

とすればいい。引数は3つまでOKらしい。

メッセージをJSPに表示する 

チェックされたエラーはFormにAddされるので、logic:messagesタグやhtml:errorsタグでJSPに表示することができる。

<logic:messagesPresent message="true"> <div class="successmsg"><ul> <html:messages id="msg" message="true">   <li><bean:write name="msg" ignore="true"/></li> </html:messages> </ul></div></logic:messagesPresent>

<html:errors />

errorの場合は、以下をリソースに書くことでprefixなどをつけることができる。

errors.header=<ul>errors.fotter=</ul>errors.prefix=<li>errors.sufix=</li>

クライアントサイドチェックを使う 

手順は以下。

  • ActionFormを作成
  • 作ったフォームにあわせてvalidation.xmlを記入する
  • JSPにJavascript出力用のタグを記述する

JSPにJavascript出力用のタグを記述する

javascriptを書き込むタグを入れる。form名には表示している画面で利用するフォーム名を記入する。

<html:javascript formName="TestForm"/>

formタグにjavascriptを呼び出すメソッドを記入する。

<html:form action="/TestAction" onsubmit="return validateTestForm(this);">

以上で完了。あとは自動的にvalidation.xmlからチェック用Javascriptを作成してくれる。