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