Strutsが分からない人は「何のことやら!?」って感じかもしれないですが。。
はい。
Spring Modulesは、ファイルにオブジェクトの定義をするだけで書式チェックをしてくれるんです!
そのやり方を見ていきます。
【準備】
まず、モジュールのダウンロード、ファイルの設定などの準備をしてください。
以下のリンクのとおりに設定すれば大丈夫です。
準備できましたら、以下に進みましょう。
【WEBの用意】
WEBは以下のものを流用します。
もしまだ作ってない方は、作ってみてくださいませ!
ただし、Validatorは作成する必要はありません。
なぜならSpringModulesの機能を使用するからです。
validatorは、「beanValidator」に書き換えてください!
---------------------
<bean id="validatorTestInputController" class="org.springframework.web.servlet.mvc.SimpleFormController">
<property name="commandClass" value="business.domain.CmdTest" />
<property name="formView" value="/WEB-INF/jsp/input.jsp" />
<property name="successView" value="/WEB-INF/jsp/input.jsp" />
<property name="validator" ref="beanValidator"/>
</bean>
---------------------
【validator.xmlの設定(この記事でのメインです!)】
妥当性チェックするWEBがあった方がイメージが付きやすいと思うので載せておきますね。
チェックボックスがチェックされたときにテキストが入力されていないときにエラーにします。
パラメタ名はそれぞれ、「display」、「message」です。
では、validator.xmlに以下を記述します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1.dtd
">
<form-validation>
<formset>
<form name="cmdTest">
<!-- 必須チェック -->
<field property="display" depends="required">
<arg0 key="表示チェック" resource="false" />
</field>
<!-- 桁数チェック -->
<field property="message" depends="maxlength">
<arg0 key="メッセージ" resource="false" />
<arg1 key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
<!-- displayがチェックされたときにmessageが空白のときにエラーとなる -->
<field property="message" depends="validwhen">
<arg0 key="メッセージ" resource="false" />
<arg1 key="表示チェック" resource="false" />
<msg name="validwhen" key="errors.requiredIfChecked"/>
<var>
<var-name>test</var-name>
<var-value>(((display == "true") and (message != null)) or (display == "false") )</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
<formタグ>
クラス1つに対して1つのformタグを記述します。
<form name="cmdTest">
cmdTestは、チェック対象のクラス名の頭を小文字にしたものを記述します。
また、formタグは複数書けます。
<fieldタグ>
チェックする内容を記述します。
<field property="display" depends="required">
<arg0 key="表示チェック" resource="false" />
</field>
これは、dependsがrequiredになっているので、必須チェックをしてくれます。
arg0は、エラーメッセージの{0}を表します。
上記の場合、「表示チェックは必須です」のようにエラーメッセージが出力されます。
おもしろいのは、validwhenです。
<field property="message" depends="validwhen">
<arg0 key="メッセージ" resource="false" />
<arg1 key="表示チェック" resource="false" />
<msg name="validwhen" key="errors.requiredIfChecked"/>
<var>
<var-name>test</var-name>
<var-value>(((display == "true") and (message != null))
or (display == "false") )</var-value>
</var>
</field>
式を使ってデータチェックをしています。
(((display == "true") and (message != null)) or (display == "false") )
なんとなく分かりますよね。
nullは予約語でnullを表し、他の英数字はプロパティ名(getter名)を表します。
単純だし、結構便利ですよね!
ただし、項ごとに括弧を書かないといけません。そこがこれの難点です。
<msg name="validwhen" key="errors.requiredIfChecked"/>
は、errors.requiredIfCheckedをエラーメッセージとして使用することを表します。
【メッセージリソースの設定(messages_ja.properties)】
あとは、メッセージリソースに追記してください。
上記でerrors.requiredIfCheckedを参照しているので、以下のメッセージを追記します。
errors.requiredIfChecked={0}は、{1}がチェックされた場合必須です。
【説明】
既に、参考にした以前の記事のWEBを動かしたことがある人は、同じ動きをすることが分かるでしょう。
ファイルにしているので、見通しがよく変更がしやすいですよね!
じゃんじゃん使っていきましょうー。
参考: