解答例 - 実習課題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と同じ)