Struts 15章 Javascriptでの検証/検証ルールの追加
- 15.1. Javascriptでのチェック
- 15.2. 独自の検証ルールの追加
- 15.3. 独自の検証ルールに対するJavascriptの作成
15.3. 独自の検証ルールに対するJavascriptの作成
独自の検証ルールに関しても、1節で説明したようにJavascriptを用いた検証を行うことができます。そのためには検証ルールの設定ファイルに、検証を行うためのJavascriptの関数を定義します。以下は、前節で作成した検証ルールに関する定義です。(Struts1.2では異なるので注意してください。)
...
<validator name="validateA"
classname="sample.ValidateA"
method="validate"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.invalidate">
<javascript><![CDATA[
function validate(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
// validateA関数から検証の対象となる入力フィールド等、必要な情報を受け取る
oValidate = new validateA();
// 検証の対象となる入力フィールドの数だけ繰り返す
for (x in oValidate) {
var field = form[oValidate[x][0]];
// 入力フィールドがtextかtextareaの場合のみチェック
if (field.type == 'text' ||
field.type == 'textarea') {
// 前後の空白を除いた値が「a」であるかチェック
if (trim(field.value)!= 'a') {
if (i == 0) {
focusField = field;
}
fields[i++] = oValidate[x][1];
// 検証に失敗したことを示すフラグを立てる
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}]]>
</javascript>
</validator>
...
一から関数を作成するのは大変ですので、提供されている検証ルールの中から類似したものをコピーして修正するのが良いです。その上で修正する箇所は以下の通りです。
- 関数名。関数名は<validator>要素のmethod属性に指定されている値と同じでなければなりません。
- 検証ルール名と同じ関数を実行している箇所が必ず1つあります。例えばrequiredルールの場合、
oRequired = new required();
となっています。この実行する関数名を<validator>要素のname名、つまり検証ルール名と同じにしなければなりません。ただし<validator>要素にjsFunctionName属性が指定されている場合には、その名前と同じにします。以下はjsFunctionName属性が指定されている場合の例です。
...
<validator name="validateA"
...
jsFunctionName="test">
<javascript><
