目次へ

解答例 - 実習課題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

web.xmlの参照(13章の実習課題1と同じ)

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と同じ)


↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp