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で定義されていないチェック(重複チェックなど)を行うことが可能。

@Override
public 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を作成してくれる。