解答例 - 実習課題3 - 15.Javascriptでの検証/検証ルールの追加
(実習課題3)
実習課題2のWebアプリケーションを改良しなさい。
- 作成した検証ルールに対応するJavascript関数を作成し、Javascriptによるチェックに適応させること。
解答例
▼ディレクトリ構成は以下の通り
.
└─WEB-INF web.xml(13章 実習課題1と同じ),
│ struts-config.xml(15章 実習課題2と同じ),
│ validation.xml(15章 実習課題2と同じ),
│ orig-validator-rules.xml,
│ validator-rules.xml(Strutsで提供されているものそのまま)
├─classes
│ └─com
│ └─techscore
│ └─struts EncodingFilter.class(2章 実習課題2と同じ)
│ │ MessageResources.properties(15章 実習課題2と同じ)
│ ├─chapter13
│ │ └─exercise2 RuleCheckForm.class(13章 実習課題2と同じ)
│ └─chapter15
│ └─exercise2 ValidateEven.class(15章 実習課題2と同じ)
├─JSP
│ └─com
│ └─techscore
│ └─struts
│ └─chapter15
│ └─exercise2 inputTest.jsp(15章 実習課題2と同じ),
│ outputTest.jsp(15章 実習課題2と同じ)
├─lib strutsライブラリjarファイル
└─tld struts-html.tld,struts-nested.tld
※strutsライブラリjarファイル
struts.jar,commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-logging.jar,
commons-validator.jar
▼orig-validator-rules.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
<global>
<validator name="even"
classname="com.techscore.struts.chapter15.exercise2.ValidateEven"
method="validateEven"
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[
// validateIntegerルールを参考に
function validateEven(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oEven = new even();
for (x in oEven) {
var field = form[oEven[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}
if (value.length > 0) {
// validateIntegerルールで定義されている関数を使用
if (!isAllDigits(value)) {
bValid = false;
if (i == 0) {
focusField = field;
}
fields[i++] = oEven[x][1];
} else {
var iValue = parseInt(value);
// 偶数かどうかの判定条件を追加
if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)
|| iValue%2!=0) {
if (i == 0) {
focusField = field;
}
fields[i++] = oEven[x][1];
bValid = false;
}
}
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
]]>
</javascript>
</validator>
</global>
</form-validation>
▼起動URLは以下の通り
WEB_ROOT/com/techscore/struts/chapter15/exercise2/InputTest.do
struts-config.xmlの参照(15章の実習課題2と同じ)
validation.xmlの参照(15章の実習課題2と同じ)
EncodingFilter.javaの参照(2章の実習課題2と同じ)
MessageResources.propertiesの参照(15章の実習課題2と同じ)
RuleCheckForm.javaの参照(13章の実習課題2と同じ)
ValidateEven.javaの参照(15章の実習課題2と同じ)

