On 15 Jan 2002 [EMAIL PROTECTED] wrote:

> Date: 15 Jan 2002 06:25:00 -0000
> From: [EMAIL PROTECTED]
> Reply-To: Struts Developers List <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> Subject: cvs commit: jakarta-struts/contrib/validator/web/example/WEB-INF
>     validation.xml web.xml
>
> dwinterfeldt    02/01/14 22:24:59
>
>   Modified:    contrib/validator INSTALL build.properties.sample build.xml
>                contrib/validator/docs index.html installation.html
>                         revision.html todolist.html
>                contrib/validator/src/share/org/apache/struts/validator/action
>                         ValidatorServlet.java
>                contrib/validator/web/example/WEB-INF validation.xml web.xml
>   Added:       contrib/validator/dist validator-rules.xml
>   Log:
>   Updated ValidatorServlet, docs, and example to allow validator rules to be stored 
>and loaded in a separate file.
>
>   Revision  Changes    Path
>   1.3       +4 -0      jakarta-struts/contrib/validator/INSTALL
>
>   Index: INSTALL
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/INSTALL,v
>   retrieving revision 1.2
>   retrieving revision 1.3
>   diff -u -r1.2 -r1.3
>   --- INSTALL 15 Jan 2002 03:57:40 -0000      1.2
>   +++ INSTALL 15 Jan 2002 06:24:59 -0000      1.3
>   @@ -9,6 +9,10 @@
>         <servlet>
>            <servlet-name>validator</servlet-name>
>            <servlet-class>org.apache.struts.action.ValidatorServlet</servlet-class>
>   +        <init-param>
>   +          <param-name>config-rules</param-name>
>   +          <param-value>/WEB-INF/validator-rules.xml</param-value>
>   +        </init-param>
>            <init-param>
>              <param-name>config</param-name>
>              <param-value>/WEB-INF/validation.xml</param-value>
>
>
>
>   1.4       +21 -0     jakarta-struts/contrib/validator/build.properties.sample
>
>   Index: build.properties.sample
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/build.properties.sample,v
>   retrieving revision 1.3
>   retrieving revision 1.4
>   diff -u -r1.3 -r1.4
>   --- build.properties.sample 15 Jan 2002 04:00:35 -0000      1.3
>   +++ build.properties.sample 15 Jan 2002 06:24:59 -0000      1.4
>   @@ -1,12 +1,33 @@
>    # Properties related to the user's environment.
>
>   +
>   +# The JAR file containing a recent nightly build of the Validator package
>   +# from the Jakarta Commons project.
>    
>commons-validator.jar=d:/office/jakarta-commons/validator/dist/commons-validator.jar
>   +
>   +# The JAR file containing version 1.0 (or later) of the Beanutils package
>   +# from the Jakarta Commons project.
>    commons-beanutils.jar=d:/java/lib/commons-beanutils.jar
>   +
>   +# The JAR file containing version 1.0 (or later) of the Collections package
>   +# from the Jakarta Commons project.
>    commons-collections.jar=d:/java/lib/commons-collections.jar
>   +
>   +# The JAR file containing version 1.0 (or later) of the Digester package
>   +# from the Jakarta Commons project.
>    commons-digester.jar=d:/java/lib/commons-digester.jar
>   +
>   +# The JAR file containing version 1.0 (or later) of the Logging package
>   +# from the Jakarta Commons project.
>   +commons-logging.jar=e:/software/commons-logging/commons-logging.jar
>   +
>    struts.jar=d:/office/struts/jakarta-struts/target/library/struts.jar
>    struts.tlds=d:/office/struts/jakarta-struts/target/library
>   +
>   +# The JAR file containing the Servlet API classes to compile against (either
>   +# version 2.2 or 2.3)
>    servlet.jar=e:/tomcat3/lib/servlet.jar
>   +
>    jdbc20ext.jar=d:/java/lib/jdbc2_0-stdext.jar
>    regexp.jar=e:/software/regexp/jakarta-regexp-1.2.jar
>    xerces.jar=e:/software/xerces/xerces.jar
>
>
>
>   1.5       +12 -7     jakarta-struts/contrib/validator/build.xml
>
>   Index: build.xml
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/build.xml,v
>   retrieving revision 1.4
>   retrieving revision 1.5
>   diff -u -r1.4 -r1.5
>   --- build.xml       15 Jan 2002 03:54:45 -0000      1.4
>   +++ build.xml       15 Jan 2002 06:24:59 -0000      1.5
>   @@ -24,8 +24,9 @@
>      <property name="build.javadocs" value="${dist}/${docs}/api" />
>      <property name="package.root" value="org/apache/struts/validator"/>
>      <property name="package.example" value="${package.root}/example"/>
>   +  <property name="default.validator.rules" value="${dist}/validator-rules.xml"/>
>
>   -  <target name="prepare">
>   +  <target name="prepare" description="Creates default directories">
>        <!-- Create the time stamp -->
>        <tstamp/>
>        <!-- Create the build directory structure used by compile -->
>   @@ -56,7 +57,7 @@
>         <pathelement location="${xerces.jar}"/>
>      </path>
>
>   -  <target name="compile" depends="prepare">
>   +  <target name="compile" depends="prepare" description="Compile distribution 
>classes.">
>        <!-- Compile the java code from ${src} into ${build} -->
>        <javac srcdir="${src}/${share}"
>               destdir="${build}">
>   @@ -64,7 +65,7 @@
>        </javac>
>      </target>
>
>   -  <target name="jar" depends="compile">
>   +  <target name="jar" depends="compile" description="Create distribution jar.">
>        <!-- Create the ${dist}/lib directory -->
>        <mkdir dir="${dist}" />
>
>   @@ -73,7 +74,7 @@
>             basedir="${build}"/>
>      </target>
>
>   -  <target name="compile_example" depends="jar">
>   +  <target name="compile_example" depends="jar" description="Compiles example 
>classes">
>        <!-- Compile the java code from ${src}/${example} into ${build} -->
>        <javac srcdir="${src}/${example}"
>               destdir="${target}/${example}/${web.classes}">
>   @@ -81,7 +82,7 @@
>        </javac>
>      </target>
>
>   -  <target name="copy_example" depends="compile_example">
>   +  <target name="copy_example" depends="compile_example" description="Copies 
>example files to target directory.">
>         <copy todir="${target}/${example}/${web.classes}" >
>           <fileset dir="${src}/${example}"
>                    excludes="**/*.java"
>   @@ -98,7 +99,7 @@
>
>      </target>
>
>   -  <target name="war" depends="copy_example">
>   +  <target name="war" depends="copy_example" description="Create example web app's 
>war.">
>        <mkdir dir="${webapps}" />
>
>        <mkdir dir="lib" />
>   @@ -107,8 +108,12 @@
>        <copy file="${commons-beanutils.jar}" todir="lib"/>
>        <copy file="${commons-collections.jar}" todir="lib"/>
>        <copy file="${commons-digester.jar}" todir="lib"/>
>   +    <copy file="${commons-logging.jar}" todir="lib"/>
>        <copy file="${regexp.jar}" todir="lib"/>
>   -
>   +
>   +    <!-- default validation rules -->
>   +    <copy file="${default.validator.rules}" todir="${target}/${example}/WEB-INF"/>
>   +
>        <copy todir="${target}/${example}" >
>          <fileset dir="${web}/${example}">
>             <include name="**/**" />
>
>
>
>   1.1                  jakarta-struts/contrib/validator/dist/validator-rules.xml
>
>   Index: validator-rules.xml
>   ===================================================================
>   <form-validation>
>      <global>
>         <validator name="required"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateRequired"
>                    msg="errors.required">
>            <javascript><![CDATA[
>               function validateRequired(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oRequired = new required();
>
>                   for (x in oRequired) {
>                       if ((form[oRequired[x][0]].type == 'text' || 
>form[oRequired[x][0]].type == 'textarea' || form[oRequired[x][0]].type == 
>'select-one' || form[oRequired[x][0]].type == 'radio' || form[oRequired[x][0]].type 
>== 'password') && form[oRequired[x][0]].value == '') {
>                          if (i == 0)
>                             focusField = form[oRequired[x][0]];
>
>                          fields[i++] = oRequired[x][1];
>
>                          bValid = false;
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="minlength"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateMinLength"
>                    depends="required"
>                    msg="errors.minlength">
>            <javascript><![CDATA[
>               function validateMinLength(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oMinLength = new minlength();
>
>                   for (x in oMinLength) {
>                       if (form[oMinLength[x][0]].type == 'text' || 
>form[oMinLength[x][0]].type == 'textarea') {
>                          var iMin = parseInt(oMinLength[x][2]("minlength"));
>
>                          if (!(form[oMinLength[x][0]].value.length >= iMin)) {
>                             if (i == 0)
>                                focusField = form[oMinLength[x][0]];
>
>                             fields[i++] = oMinLength[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="maxlength"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateMaxLength"
>                    depends="required"
>                    msg="errors.maxlength">
>            <javascript><![CDATA[
>               function validateMaxLength(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oMaxLength = new maxlength();
>
>                   for (x in oMaxLength) {
>                       if (form[oMaxLength[x][0]].type == 'text' || 
>form[oMaxLength[x][0]].type == 'textarea') {
>                          var iMax = parseInt(oMaxLength[x][2]("maxlength"));
>
>                          if (!(form[oMaxLength[x][0]].value.length <= iMax)) {
>                             if (i == 0)
>                                focusField = form[oMaxLength[x][0]];
>
>                             fields[i++] = oMaxLength[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="mask"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateMask"
>                    depends="required"
>                    msg="errors.invalid">
>            <javascript><![CDATA[
>               function validateMask(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oMasked = new mask();
>
>                   for (x in oMasked) {
>                       if ((form[oMasked[x][0]].type == 'text' || 
>form[oMasked[x][0]].type == 'textarea' || form[oMasked[x][0]].type == 'password') && 
>form[oMasked[x][0]].value.length > 0) {
>                          if (!matchPattern(form[oMasked[x][0]].value, 
>oMasked[x][2]("mask"))) {
>                             if (i == 0)
>                                focusField = form[oMasked[x][0]];
>
>                             fields[i++] = oMasked[x][1];
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }
>
>               function matchPattern(value, mask) {
>                  var bMatched = mask.exec(value);
>
>                  if(!bMatched) {
>                     return false;
>                  }
>
>                  return true;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="byte"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateByte"
>                    depends="required"
>                    msg="errors.byte"
>                    jsFunctionName="ByteValidations">
>            <javascript><![CDATA[
>               function validateByte(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oByte = new ByteValidations();
>
>                   for (x in oByte) {
>                       if ((form[oByte[x][0]].type == 'text' || 
>form[oByte[x][0]].type == 'textarea' || form[oByte[x][0]].type == 'select-one' || 
>form[oByte[x][0]].type == 'radio') && form[oByte[x][0]].value.length > 0) {
>                          var iValue = parseInt(form[oByte[x][0]].value);
>
>                          if (!iValue || !(iValue >= -128 && iValue <= 127)) {
>                             if (i == 0)
>                                focusField = form[oByte[x][0]];
>
>                             fields[i++] = oByte[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="short"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateShort"
>                    depends="required"
>                    msg="errors.short"
>                    jsFunctionName="ShortValidations">
>            <javascript><![CDATA[
>               function validateShort(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oShort = new ShortValidations();
>
>                   for (x in oShort) {
>                       if ((form[oShort[x][0]].type == 'text' || 
>form[oShort[x][0]].type == 'textarea' || form[oShort[x][0]].type == 'select-one' || 
>form[oShort[x][0]].type == 'radio') && form[oShort[x][0]].value.length > 0) {
>                          var iValue = parseInt(form[oShort[x][0]].value);
>
>                          if (!iValue || !(iValue >= -32768 && iValue <= 32767)) {
>                             if (i == 0)
>                                focusField = form[oShort[x][0]];
>
>                             fields[i++] = oShort[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="integer"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateInteger"
>                    depends="required"
>                    msg="errors.integer"
>                    jsFunctionName="IntegerValidations">
>            <javascript><![CDATA[
>               function validateInteger(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oInteger = new IntegerValidations();
>
>                   for (x in oInteger) {
>                       if ((form[oInteger[x][0]].type == 'text' || 
>form[oInteger[x][0]].type == 'textarea' || form[oInteger[x][0]].type == 'select-one' 
>|| form[oInteger[x][0]].type == 'radio') && form[oInteger[x][0]].value.length > 0) {
>                          var iValue = parseInt(form[oInteger[x][0]].value);
>
>                          if (!iValue || !(iValue >= -2147483648 && iValue <= 
>2147483647)) {
>                             if (i == 0)
>                                focusField = form[oInteger[x][0]];
>
>                             fields[i++] = oInteger[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="long"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateLong"
>                    depends="required"
>                    msg="errors.long"
>         />
>         <validator name="float"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateFloat"
>                    depends="required"
>                    msg="errors.float"
>                    jsFunctionName="FloatValidations">
>            <javascript><![CDATA[
>               function validateFloat(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oFloat = new FloatValidations();
>
>                   for (x in oFloat) {
>                       if ((form[oFloat[x][0]].type == 'text' || 
>form[oFloat[x][0]].type == 'textarea' || form[oFloat[x][0]].type == 'select-one' || 
>form[oFloat[x][0]].type == 'radio') && form[oFloat[x][0]].value.length > 0) {
>                          var iValue = parseFloat(form[oFloat[x][0]].value);
>
>                          if (!iValue) {
>                             if (i == 0)
>                                focusField = form[oFloat[x][0]];
>
>                             fields[i++] = oFloat[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="double"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateDouble"
>                    depends="required"
>                    msg="errors.double"/>
>
>         <validator name="date"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateDate"
>                    depends="required"
>                    msg="errors.date"
>                    jsFunctionName="DateValidations">
>            <javascript><![CDATA[
>               function validateDate(form) {
>                  var bValid = true;
>                  var focusField = null;
>                  var i = 0;
>                  var fields = new Array();
>                  oDate = new DateValidations();
>
>                  for (x in oDate) {
>                     var value = form[oDate[x][0]].value;
>                     var datePattern = oDate[x][2]("datePatternStrict");
>
>                     if ((form[oDate[x][0]].type == 'text' || form[oDate[x][0]].type 
>== 'textarea') && value.length > 0 && datePattern.length > 0) {
>                        var MONTH = "MM";
>                        var DAY = "dd";
>                        var YEAR = "yyyy";
>
>                        var orderMonth = datePattern.indexOf(MONTH);
>                        var orderDay = datePattern.indexOf(DAY);
>                        var orderYear = datePattern.indexOf(YEAR);
>
>                        if ((orderDay < orderYear && orderDay > orderMonth)) {
>                           var iDelim1 = orderMonth + MONTH.length;
>                           var iDelim2 = orderDay + DAY.length;
>                           var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
>                           var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
>
>                           if (iDelim1 == orderDay && iDelim2 == orderYear) {
>                              dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
>                           } else if (iDelim1 == orderDay) {
>                              dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + 
>"](\\d{4})$");
>                           } else if (iDelim2 == orderYear) {
>                              dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})(\\d{4})$");
>                           } else {
>                              dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})[" + delim2 + "](\\d{4})$");
>                           }
>
>                           var matched = dateRegexp.exec(value);
>
>                           if(matched != null) {
>                              if (!isValidDate(matched[2], matched[1], matched[3])) {
>                                 if (i == 0)
>                                    focusField = form[oDate[x][0]];
>
>                                 fields[i++] = oDate[x][1];
>                                 bValid =  false;
>                              }
>                           } else {
>                              if (i == 0)
>                                 focusField = form[oDate[x][0]];
>
>                              fields[i++] = oDate[x][1];
>                              bValid =  false;
>                           }
>                        } else if ((orderMonth < orderYear && orderMonth > orderDay)) 
>{
>                           var iDelim1 = orderDay + DAY.length;
>                           var iDelim2 = orderMonth + MONTH.length;
>                           var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
>                           var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
>
>                           if (iDelim1 == orderMonth && iDelim2 == orderYear) {
>                              dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
>                           } else if (iDelim1 == orderMonth) {
>                              dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + 
>"](\\d{4})$");
>                           } else if (iDelim2 == orderYear) {
>                              dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})(\\d{4})$");
>                           } else {
>                              dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})[" + delim2 + "](\\d{4})$");
>                           }
>
>                           var matched = dateRegexp.exec(value);
>
>                           if(matched != null) {
>                              if (!isValidDate(matched[1], matched[2], matched[3])) {
>                                 if (i == 0)
>                                    focusField = form[oDate[x][0]];
>
>                                 fields[i++] = oDate[x][1];
>                                 bValid =  false;
>                              }
>                           } else {
>                              if (i == 0)
>                                 focusField = form[oDate[x][0]];
>
>                              fields[i++] = oDate[x][1];
>                              bValid =  false;
>                           }
>                        } else if ((orderMonth > orderYear && orderMonth < orderDay)) 
>{
>                           var iDelim1 = orderYear + YEAR.length;
>                           var iDelim2 = orderMonth + MONTH.length;
>                           var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
>                           var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
>
>                           if (iDelim1 == orderMonth && iDelim2 == orderDay) {
>                              dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
>                           } else if (iDelim1 == orderMonth) {
>                              dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + 
>"](\\d{2})$");
>                           } else if (iDelim2 == orderDay) {
>                              dateRegexp = new RegExp("^(\\d{4})[" + delim1 + 
>"](\\d{2})(\\d{2})$");
>                           } else {
>                              dateRegexp = new RegExp("^(\\d{4})[" + delim1 + 
>"](\\d{2})[" + delim2 + "](\\d{2})$");
>                           }
>
>                           var matched = dateRegexp.exec(value);
>
>                           if(matched != null) {
>
>                              if (!isValidDate(matched[3], matched[2], matched[1])) {
>                                 if (i == 0)
>                                    focusField = form[oDate[x][0]];
>
>                                 fields[i++] = oDate[x][1];
>                                 bValid =  false;
>                              }
>                           } else {
>                              if (i == 0)
>                                 focusField = form[oDate[x][0]];
>
>                              fields[i++] = oDate[x][1];
>                              bValid =  false;
>                           }
>                        } else {
>                           if (i == 0)
>                              focusField = form[oDate[x][0]];
>
>                           fields[i++] = oDate[x][1];
>                           bValid =  false;
>                        }
>
>                     }
>                  }
>
>                  if (fields.length > 0) {
>                     focusField.focus();
>                     alert(fields.join('\n'));
>                  }
>
>                  return bValid;
>               }
>
>           function isValidDate(day, month, year) {
>              if (month < 1 || month > 12)
>                 return false;
>
>              if (day < 1 || day > 31)
>                 return false;
>
>              if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 
>31)
>                 return false;
>
>              if (month == 2) {
>                 var leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
>                 if (day>29 || (day == 29 && !leap))
>                    return false;
>              }
>
>              return true;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="range"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateRange"
>                    depends="required,integer"
>                    msg="errors.range">
>            <javascript><![CDATA[
>               function validateRange(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oRange = new range();
>
>                   for (x in oRange) {
>                       if ((form[oRange[x][0]].type == 'text' || 
>form[oRange[x][0]].type == 'textarea') && form[oRange[x][0]].value.length > 0) {
>                          var iMin = parseInt(oRange[x][2]("min"));
>                          var iMax = parseInt(oRange[x][2]("max"));
>                          var iValue = parseInt(form[oRange[x][0]].value);
>
>                          if (!(iValue >= iMin && iValue <= iMax)) {
>                             if (i == 0)
>                                focusField = form[oRange[x][0]];
>
>                             fields[i++] = oRange[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="creditCard"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateCreditCard"
>                    depends="required"
>                    msg="errors.creditcard">
>            <javascript><![CDATA[
>               function validateCreditCard(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oCreditCard = new creditCard();
>
>                   for (x in oCreditCard) {
>                       if ((form[oCreditCard[x][0]].type == 'text' || 
>form[oCreditCard[x][0]].type == 'textarea') && form[oCreditCard[x][0]].value.length > 
>0) {
>                          if (!luhnCheck(form[oCreditCard[x][0]].value)) {
>                             if (i == 0)
>                                focusField = form[oCreditCard[x][0]];
>
>                             fields[i++] = oCreditCard[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }
>
>               /**
>                * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
>               */
>               function luhnCheck(cardNumber) {
>                   if (isLuhnNum(cardNumber)) {
>                       var no_digit = cardNumber.length;
>                       var oddoeven = no_digit & 1;
>                       var sum = 0;
>                       for (var count = 0; count < no_digit; count++) {
>                           var digit = parseInt(cardNumber.charAt(count));
>                           if (!((count & 1) ^ oddoeven)) {
>                               digit *= 2;
>                               if (digit > 9) digit -= 9;
>                           };
>                           sum += digit;
>                       };
>                       if (sum == 0) return false;
>                       if (sum % 10 == 0) return true;
>                   };
>                   return false;
>               }
>
>               function isLuhnNum(argvalue) {
>                   argvalue = argvalue.toString();
>                   if (argvalue.length == 0)
>                      return false;
>                   for (var n = 0; n < argvalue.length; n++)
>                      if (argvalue.substring(n, n+1) < "0" || 
>argvalue.substring(n,n+1) > "9")
>                         return false;
>
>                   return true;
>               }]]>
>            </javascript>
>         </validator>
>
>         <validator name="email"
>                    classname="org.apache.struts.validator.util.StrutsValidator"
>                    method="validateEmail"
>                    depends="required"
>                    msg="errors.email">
>            <javascript><![CDATA[
>               function validateEmail(form) {
>                   var bValid = true;
>                   var focusField = null;
>                   var i = 0;
>                   var fields = new Array();
>                   oEmail = new email();
>
>                   for (x in oEmail) {
>                       if ((form[oEmail[x][0]].type == 'text' || 
>form[oEmail[x][0]].type == 'textarea') && form[oEmail[x][0]].value.length > 0) {
>                          if (!checkEmail(form[oEmail[x][0]].value)) {
>                             if (i == 0)
>                                focusField = form[oEmail[x][0]];
>
>                             fields[i++] = oEmail[x][1];
>
>                             bValid = false;
>                          }
>                       }
>                   }
>
>                   if (fields.length > 0) {
>                      focusField.focus();
>                      alert(fields.join('\n'));
>                   }
>
>                   return bValid;
>               }
>
>               /**
>                * Reference: Sandeep V. Tamhankar ([EMAIL PROTECTED]),
>                * http://javascript.internet.com
>               */
>               function checkEmail(emailStr) {
>                  if (emailStr.length == 0)
>                     return true;
>                  var emailPat=/^(.+)@(.+)$/;
>                  var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
>                  var validChars="\[^\\s" + specialChars + "\]";
>                  var quotedUser="(\"[^\"]*\")";
>                  var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
>                  var atom=validChars + '+';
>                  var word="(" + atom + "|" + quotedUser + ")";
>                  var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
>                  var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
>                  var matchArray=emailStr.match(emailPat);
>
>                  if (matchArray == null)
>                     return false;
>
>                  var user=matchArray[1];
>                  var domain=matchArray[2];
>
>                  if (user.match(userPat) == null)
>                      return false;
>
>                  var IPArray = domain.match(ipDomainPat);
>                  if (IPArray != null) {
>                      for (var i = 1; i <= 4; i++) {
>                         if (IPArray[i] > 255)
>                            return false;
>                      }
>
>                      return true;
>                  }
>
>                  var domainArray=domain.match(domainPat);
>                  if (domainArray == null)
>                      return false;
>
>                  var atomPat=new RegExp(atom,"g");
>                  var domArr=domain.match(atomPat);
>                  var len=domArr.length;
>
>                  if (domArr[domArr.length-1].length < 2 || 
>domArr[domArr.length-1].length > 3)
>                     return false;
>
>                  if (len < 2)
>                     return false;
>
>                  return true;
>               }]]>
>            </javascript>
>         </validator>
>      </global>
>   </form-validation>
>
>
>
>   1.5       +15 -13    jakarta-struts/contrib/validator/docs/index.html
>
>   Index: index.html
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/docs/index.html,v
>   retrieving revision 1.4
>   retrieving revision 1.5
>   diff -u -r1.4 -r1.5
>   --- index.html      15 Jan 2002 03:55:34 -0000      1.4
>   +++ index.html      15 Jan 2002 06:24:59 -0000      1.5
>   @@ -49,9 +49,10 @@
>           </td>
>           <!-- Body -->
>           <td valign="top">
>   -          <p>The Validation Framework was made to work with
>   -             <a href="http://jakarta.apache.org/struts";>Struts</a> although it 
>can be used to perform
>   -             validation on any JavaBean (by using the Validator class).  It can 
>perform basic
>   +          <p>The Validation Framework is now based on the Commons Validator
>   +             (<a 
>href="http://jakarta.apache.org/commons";>http://jakarta.apache.org/commons</a>).
>   +             Everything should work as it previously had  with
>   +             <a href="http://jakarta.apache.org/struts";>Struts</a>.  It can 
>perform basic
>                 validations to check if a field is required, matches a regular 
>expression,
>                 email, credit card, and server side type checking and date 
>validation.  Different
>                 validation rules can be defined for different locales.  The 
>framework has basic support for
>   @@ -60,28 +61,29 @@
>                 to the framework.
>              </p>
>              <p>
>   -             I wanted to mention that any type of validation can be performed in 
>a validation
>   -             method.  There seems to be a conception in some e-mails that the 
>framework is only based on regular
>   -             expressions.  They can do a lot so they are used almost exclusively 
>in the examples, but the type
>   -             form shows validating some java primitives using standard java 
>methods like Integer.parseInt,
>   -             validating a range, validating a credit card number, and validating 
>a date.
>   +             There is an optional config-rules parameter that the 
>ValdidatorServlet can take.  This allows you
>   +             to store your validator rules (validator definitions) in a separate 
>file.  The standard file is
>   +             available in the dist directory and is named validator-rules.xml.
>              </p>
>   -          <p>The Struts Validator is going to be incorporated into Struts 1.1.  
>I'm working on finalizing
>   -             any design and/or feature issues before this occurs.<BR>
>   -             &nbsp;&nbsp;&nbsp; Note: The 7/2/2001 release is the last release 
>build with Struts 1.0.
>   -     </p>
>         <p>Feedback on bugs and suggestions are welcome.<BR>
>            &nbsp;&nbsp;&nbsp;<a 
>href="mailto:[EMAIL PROTECTED]";>[EMAIL PROTECTED]</a>
>         </p>
>         <BR>
>         <p>
>   -        <font size=-1>Update 1/13/2002</font><BR>
>   +        <font size=-1>Update 1/14/2002</font><BR>
>            <ul>
>               <li>Upgraded to use Commons Validator 
>(http://jakarta.apache.org/commons).</li>
>                    <li>Packages changed to fall under 
>org.apache.struts.validator.</li>
>                    <li>Documentation updated</li>
>                    <li>Custom JSP Tags except for JavascriptValidatorTag have been 
>removed.</li>
>                    <li>GenericAction class and JDBC example have been removed.</li>
>   +                <li>
>   +                    Added config-rules parameter to the ValidatorServlet so 
>validation rules
>   +                    could be stored in a separate xml file.  The config parameter 
>file
>   +                    can still contain rules.  The file specified by config-rules 
>will be loaded
>   +                    first so the file specified by config can define or override 
>any validator
>   +                    elements necessary.
>   +                </li>
>            </ul>
>         </p>
>
>
>
>
>   1.4       +4 -0      jakarta-struts/contrib/validator/docs/installation.html
>
>   Index: installation.html
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/docs/installation.html,v
>   retrieving revision 1.3
>   retrieving revision 1.4
>   diff -u -r1.3 -r1.4
>   --- installation.html       15 Jan 2002 03:55:34 -0000      1.3
>   +++ installation.html       15 Jan 2002 06:24:59 -0000      1.4
>   @@ -59,6 +59,10 @@
>                &nbsp;&nbsp;  &lt;servlet-name&gt;validator&lt;/servlet-name&gt;      
>                                <BR>
>                &nbsp;&nbsp;  
>&lt;servlet-class&gt;org.apache.struts.validator.action.ValidatorServlet&lt;/servlet-class&gt;
>    <BR>
>                &nbsp;&nbsp;  &lt;init-param&gt;                                      
>                          <BR>
>   +            &nbsp;&nbsp;&nbsp;&nbsp;    
>&lt;param-name&gt;config-rules&lt;/param-name&gt;                                     
>       <BR>
>   +            &nbsp;&nbsp;&nbsp;&nbsp;    
>&lt;param-value&gt;/WEB-INF/validator-rules.xml&lt;/param-value&gt;                   
>                           <BR>
>   +            &nbsp;&nbsp;  &lt;/init-param&gt;                                     
>                          <BR>
>   +            &nbsp;&nbsp;  &lt;init-param&gt;                                      
>                          <BR>
>                &nbsp;&nbsp;&nbsp;&nbsp;    
>&lt;param-name&gt;config&lt;/param-name&gt;                                           
> <BR>
>                &nbsp;&nbsp;&nbsp;&nbsp;    
>&lt;param-value&gt;/WEB-INF/validation.xml&lt;/param-value&gt;                        
>                      <BR>
>                &nbsp;&nbsp;  &lt;/init-param&gt;                                     
>                          <BR>
>
>
>
>   1.6       +8 -1      jakarta-struts/contrib/validator/docs/revision.html
>
>   Index: revision.html
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/docs/revision.html,v
>   retrieving revision 1.5
>   retrieving revision 1.6
>   diff -u -r1.5 -r1.6
>   --- revision.html   15 Jan 2002 03:55:34 -0000      1.5
>   +++ revision.html   15 Jan 2002 06:24:59 -0000      1.6
>   @@ -50,13 +50,20 @@
>           <!-- Body -->
>           <td valign="top">
>              <H2>Revision Info</H2>
>   -      <font size=-1>Update 1/13/2002</font><BR>
>   +      <font size=-1>Update 1/14/2002</font><BR>
>          <ul>
>             <li>Upgraded to use Commons Validator 
>(http://jakarta.apache.org/commons).</li>
>                  <li>Packages changed to fall under org.apache.struts.validator.</li>
>                  <li>Documentation updated</li>
>                  <li>Custom JSP Tags except for JavascriptValidatorTag have been 
>removed.</li>
>                  <li>GenericAction class and JDBC example have been removed.</li>
>   +              <li>
>   +                  Added config-rules parameter to the ValidatorServlet so 
>validation rules
>   +                  could be stored in a separate xml file.  The config parameter 
>file
>   +                  can still contain rules.  The file specified by config-rules 
>will be loaded
>   +                  first so the file specified by config can define or override 
>any validator
>   +                  elements necessary.
>   +              </li>
>          </ul>
>          <font size=-1>Update 10/18/2001 (using Struts 10/18/2001 source)</font><BR>
>          <ul>
>
>
>
>   1.6       +1 -0      jakarta-struts/contrib/validator/docs/todolist.html
>
>   Index: todolist.html
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/docs/todolist.html,v
>   retrieving revision 1.5
>   retrieving revision 1.6
>   diff -u -r1.5 -r1.6
>   --- todolist.html   15 Jan 2002 04:25:16 -0000      1.5
>   +++ todolist.html   15 Jan 2002 06:24:59 -0000      1.6
>   @@ -52,6 +52,7 @@
>              <H2>To Do List</H2>
>              <ul>
>                 <li>Have a way for indexed properties to work with 
>JavascriptValidatorTag.</li>
>   +             <li>Fix bug in Javascript for select fields.</li>
>              </ul>
>           </td>
>           <!-- / Body -->
>
>
>
>   1.2       +44 -11    
>jakarta-struts/contrib/validator/src/share/org/apache/struts/validator/action/ValidatorServlet.java
>
>   Index: ValidatorServlet.java
>   ===================================================================
>   RCS file: 
>/home/cvs/jakarta-struts/contrib/validator/src/share/org/apache/struts/validator/action/ValidatorServlet.java,v
>   retrieving revision 1.1
>   retrieving revision 1.2
>   diff -u -r1.1 -r1.2
>   --- ValidatorServlet.java   15 Jan 2002 03:48:06 -0000      1.1
>   +++ ValidatorServlet.java   15 Jan 2002 06:24:59 -0000      1.2
>   @@ -84,10 +84,15 @@
>
>        /**
>         * The context-relative path to our configuration resource.
>   -     */
>   +    */
>        protected String config = "WEB-INF/validation.xml";
>
>        /**
>   +     * The context-relative path to our configuration resource of validator rules.
>   +    */
>   +    protected String configRules = "WEB-INF/validator-rules.xml";
>   +
>   +    /**
>         * The debugging detail level for this servlet.
>         */
>        protected int debug = 0;
>   @@ -202,26 +207,54 @@
>         * @exception ServletException if we cannot initialize these resources
>         */
>        protected void initMapping() throws IOException, ServletException {
>   -   // Acquire an input stream to our database file
>   +   resources = new ValidatorResources();
>
>       // Initialize the context-relative path to our configuration resources
>       String value = null;
>   -   value = getServletConfig().getInitParameter("config");
>   -   if (value != null)
>   -       config = value;
>   -   if (debug >= 1)
>   -       log("Loading validation file from '" + config + "'");
>   +   value = getServletConfig().getInitParameter("config-rules");
>   +   if (value != null) {
>   +      configRules = value;
>   +   }
>   +   if (debug >= 1) {
>   +      log("Loading validation rules file from '" + configRules + "'");
>   +   }
>
>       InputStream input = null;
>   +   BufferedInputStream bis = null;
>   +   input = getServletContext().getResourceAsStream(configRules);
>   +   if (input != null) {
>   +      bis = new BufferedInputStream(input);
>   +
>   +           try {
>   +              // pass in false so resources aren't processed
>   +              // until second file is loaded
>   +              ValidatorResourcesInitializer.initialize(resources, bis, false);
>   +           } catch (Exception e) {
>   +              log("ValidatorServlet::initMapping - " + e.getMessage(), debug);
>   +           }
>   +   } else {
>   +      log("Skipping validation rules file from '" + configRules + "'.  No stream 
>could be opened.");
>   +   }
>   +
>   +
>   +   value = getServletConfig().getInitParameter("config");
>   +   if (value != null) {
>   +      config = value;
>   +   }
>   +   if (debug >= 1) {
>   +      log("Loading validation file from '" + config + "'");
>   +   }
>   +
>       input = getServletContext().getResourceAsStream(config);
>   -   if (input == null)
>   +   if (input == null) {
>           throw new UnavailableException("Can't load Validator XML file.");
>   +   }
>
>   -   BufferedInputStream bis = new BufferedInputStream(input);
>   +   bis = new BufferedInputStream(input);
>
>            try {
>   -           resources = ValidatorResourcesInitializer.initialize(bis, debug);
>   -           //  new HttpValidatorLog(getServletContext()), bis, debug);
>   +           // pass in true so resources are processed
>   +           ValidatorResourcesInitializer.initialize(resources, bis, true);
>            } catch (Exception e) {
>               log("ValidatorServlet::initMapping - " + e.getMessage(), debug);
>            }
>
>
>
>   1.6       +0 -688    
>jakarta-struts/contrib/validator/web/example/WEB-INF/validation.xml
>
>   Index: validation.xml
>   ===================================================================
>   RCS file: 
>/home/cvs/jakarta-struts/contrib/validator/web/example/WEB-INF/validation.xml,v
>   retrieving revision 1.5
>   retrieving revision 1.6
>   diff -u -r1.5 -r1.6
>   --- validation.xml  15 Jan 2002 03:57:40 -0000      1.5
>   +++ validation.xml  15 Jan 2002 06:24:59 -0000      1.6
>   @@ -2,694 +2,6 @@
>       <global>
>          <constant name="phone" value="^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$" />
>          <constant name="zip" value="^\d{5}\d*$" />
>   -
>   -      <validator name="required"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateRequired"
>   -                 msg="errors.required">
>   -         <javascript><![CDATA[
>   -            function validateRequired(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oRequired = new required();
>   -
>   -                for (x in oRequired) {
>   -                    if ((form[oRequired[x][0]].type == 'text' || 
>form[oRequired[x][0]].type == 'textarea' || form[oRequired[x][0]].type == 
>'select-one' || form[oRequired[x][0]].type == 'radio' || form[oRequired[x][0]].type 
>== 'password') && form[oRequired[x][0]].value == '') {
>   -                       if (i == 0)
>   -                          focusField = form[oRequired[x][0]];
>   -
>   -                       fields[i++] = oRequired[x][1];
>   -
>   -                       bValid = false;
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="minlength"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateMinLength"
>   -                 depends="required"
>   -                 msg="errors.minlength">
>   -         <javascript><![CDATA[
>   -            function validateMinLength(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oMinLength = new minlength();
>   -
>   -                for (x in oMinLength) {
>   -                    if (form[oMinLength[x][0]].type == 'text' || 
>form[oMinLength[x][0]].type == 'textarea') {
>   -                       var iMin = parseInt(oMinLength[x][2]("minlength"));
>   -
>   -                       if (!(form[oMinLength[x][0]].value.length >= iMin)) {
>   -                          if (i == 0)
>   -                             focusField = form[oMinLength[x][0]];
>   -
>   -                          fields[i++] = oMinLength[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="maxlength"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateMaxLength"
>   -                 depends="required"
>   -                 msg="errors.maxlength">
>   -         <javascript><![CDATA[
>   -            function validateMaxLength(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oMaxLength = new maxlength();
>   -
>   -                for (x in oMaxLength) {
>   -                    if (form[oMaxLength[x][0]].type == 'text' || 
>form[oMaxLength[x][0]].type == 'textarea') {
>   -                       var iMax = parseInt(oMaxLength[x][2]("maxlength"));
>   -
>   -                       if (!(form[oMaxLength[x][0]].value.length <= iMax)) {
>   -                          if (i == 0)
>   -                             focusField = form[oMaxLength[x][0]];
>   -
>   -                          fields[i++] = oMaxLength[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="mask"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateMask"
>   -                 depends="required"
>   -                 msg="errors.invalid">
>   -         <javascript><![CDATA[
>   -            function validateMask(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oMasked = new mask();
>   -
>   -                for (x in oMasked) {
>   -                    if ((form[oMasked[x][0]].type == 'text' || 
>form[oMasked[x][0]].type == 'textarea' || form[oMasked[x][0]].type == 'password') && 
>form[oMasked[x][0]].value.length > 0) {
>   -                       if (!matchPattern(form[oMasked[x][0]].value, 
>oMasked[x][2]("mask"))) {
>   -                          if (i == 0)
>   -                             focusField = form[oMasked[x][0]];
>   -
>   -                          fields[i++] = oMasked[x][1];
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }
>   -
>   -            function matchPattern(value, mask) {
>   -               var bMatched = mask.exec(value);
>   -
>   -               if(!bMatched) {
>   -                  return false;
>   -               }
>   -
>   -               return true;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="byte"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateByte"
>   -                 depends="required"
>   -                 msg="errors.byte"
>   -                 jsFunctionName="ByteValidations">
>   -         <javascript><![CDATA[
>   -            function validateByte(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oByte = new ByteValidations();
>   -
>   -                for (x in oByte) {
>   -                    if ((form[oByte[x][0]].type == 'text' || 
>form[oByte[x][0]].type == 'textarea' || form[oByte[x][0]].type == 'select-one' || 
>form[oByte[x][0]].type == 'radio') && form[oByte[x][0]].value.length > 0) {
>   -                       var iValue = parseInt(form[oByte[x][0]].value);
>   -
>   -                       if (!iValue || !(iValue >= -128 && iValue <= 127)) {
>   -                          if (i == 0)
>   -                             focusField = form[oByte[x][0]];
>   -
>   -                          fields[i++] = oByte[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="short"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateShort"
>   -                 depends="required"
>   -                 msg="errors.short"
>   -                 jsFunctionName="ShortValidations">
>   -         <javascript><![CDATA[
>   -            function validateShort(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oShort = new ShortValidations();
>   -
>   -                for (x in oShort) {
>   -                    if ((form[oShort[x][0]].type == 'text' || 
>form[oShort[x][0]].type == 'textarea' || form[oShort[x][0]].type == 'select-one' || 
>form[oShort[x][0]].type == 'radio') && form[oShort[x][0]].value.length > 0) {
>   -                       var iValue = parseInt(form[oShort[x][0]].value);
>   -
>   -                       if (!iValue || !(iValue >= -32768 && iValue <= 32767)) {
>   -                          if (i == 0)
>   -                             focusField = form[oShort[x][0]];
>   -
>   -                          fields[i++] = oShort[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="integer"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateInteger"
>   -                 depends="required"
>   -                 msg="errors.integer"
>   -                 jsFunctionName="IntegerValidations">
>   -         <javascript><![CDATA[
>   -            function validateInteger(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oInteger = new IntegerValidations();
>   -
>   -                for (x in oInteger) {
>   -                    if ((form[oInteger[x][0]].type == 'text' || 
>form[oInteger[x][0]].type == 'textarea' || form[oInteger[x][0]].type == 'select-one' 
>|| form[oInteger[x][0]].type == 'radio') && form[oInteger[x][0]].value.length > 0) {
>   -                       var iValue = parseInt(form[oInteger[x][0]].value);
>   -
>   -                       if (!iValue || !(iValue >= -2147483648 && iValue <= 
>2147483647)) {
>   -                          if (i == 0)
>   -                             focusField = form[oInteger[x][0]];
>   -
>   -                          fields[i++] = oInteger[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="long"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateLong"
>   -                 depends="required"
>   -                 msg="errors.long"
>   -      />
>   -      <validator name="float"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateFloat"
>   -                 depends="required"
>   -                 msg="errors.float"
>   -                 jsFunctionName="FloatValidations">
>   -         <javascript><![CDATA[
>   -            function validateFloat(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oFloat = new FloatValidations();
>   -
>   -                for (x in oFloat) {
>   -                    if ((form[oFloat[x][0]].type == 'text' || 
>form[oFloat[x][0]].type == 'textarea' || form[oFloat[x][0]].type == 'select-one' || 
>form[oFloat[x][0]].type == 'radio') && form[oFloat[x][0]].value.length > 0) {
>   -                       var iValue = parseFloat(form[oFloat[x][0]].value);
>   -
>   -                       if (!iValue) {
>   -                          if (i == 0)
>   -                             focusField = form[oFloat[x][0]];
>   -
>   -                          fields[i++] = oFloat[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="double"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateDouble"
>   -                 depends="required"
>   -                 msg="errors.double"/>
>   -
>   -      <validator name="date"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateDate"
>   -                 depends="required"
>   -                 msg="errors.date"
>   -                 jsFunctionName="DateValidations">
>   -         <javascript><![CDATA[
>   -            function validateDate(form) {
>   -               var bValid = true;
>   -               var focusField = null;
>   -               var i = 0;
>   -               var fields = new Array();
>   -               oDate = new DateValidations();
>   -
>   -               for (x in oDate) {
>   -                  var value = form[oDate[x][0]].value;
>   -                  var datePattern = oDate[x][2]("datePatternStrict");
>   -
>   -                  if ((form[oDate[x][0]].type == 'text' || form[oDate[x][0]].type 
>== 'textarea') && value.length > 0 && datePattern.length > 0) {
>   -                     var MONTH = "MM";
>   -                     var DAY = "dd";
>   -                     var YEAR = "yyyy";
>   -
>   -                     var orderMonth = datePattern.indexOf(MONTH);
>   -                     var orderDay = datePattern.indexOf(DAY);
>   -                     var orderYear = datePattern.indexOf(YEAR);
>   -
>   -                     if ((orderDay < orderYear && orderDay > orderMonth)) {
>   -                        var iDelim1 = orderMonth + MONTH.length;
>   -                        var iDelim2 = orderDay + DAY.length;
>   -                        var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
>   -                        var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
>   -
>   -                        if (iDelim1 == orderDay && iDelim2 == orderYear) {
>   -                           dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
>   -                        } else if (iDelim1 == orderDay) {
>   -                           dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 
>+ "](\\d{4})$");
>   -                        } else if (iDelim2 == orderYear) {
>   -                           dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})(\\d{4})$");
>   -                        } else {
>   -                           dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})[" + delim2 + "](\\d{4})$");
>   -                        }
>   -
>   -                        var matched = dateRegexp.exec(value);
>   -
>   -                        if(matched != null) {
>   -                           if (!isValidDate(matched[2], matched[1], matched[3])) {
>   -                              if (i == 0)
>   -                                 focusField = form[oDate[x][0]];
>   -
>   -                              fields[i++] = oDate[x][1];
>   -                              bValid =  false;
>   -                           }
>   -                        } else {
>   -                           if (i == 0)
>   -                              focusField = form[oDate[x][0]];
>   -
>   -                           fields[i++] = oDate[x][1];
>   -                           bValid =  false;
>   -                        }
>   -                     } else if ((orderMonth < orderYear && orderMonth > 
>orderDay)) {
>   -                        var iDelim1 = orderDay + DAY.length;
>   -                        var iDelim2 = orderMonth + MONTH.length;
>   -                        var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
>   -                        var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
>   -
>   -                        if (iDelim1 == orderMonth && iDelim2 == orderYear) {
>   -                           dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
>   -                        } else if (iDelim1 == orderMonth) {
>   -                           dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 
>+ "](\\d{4})$");
>   -                        } else if (iDelim2 == orderYear) {
>   -                           dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})(\\d{4})$");
>   -                        } else {
>   -                           dateRegexp = new RegExp("^(\\d{2})[" + delim1 + 
>"](\\d{2})[" + delim2 + "](\\d{4})$");
>   -                        }
>   -
>   -                        var matched = dateRegexp.exec(value);
>   -
>   -                        if(matched != null) {
>   -                           if (!isValidDate(matched[1], matched[2], matched[3])) {
>   -                              if (i == 0)
>   -                                 focusField = form[oDate[x][0]];
>   -
>   -                              fields[i++] = oDate[x][1];
>   -                              bValid =  false;
>   -                           }
>   -                        } else {
>   -                           if (i == 0)
>   -                              focusField = form[oDate[x][0]];
>   -
>   -                           fields[i++] = oDate[x][1];
>   -                           bValid =  false;
>   -                        }
>   -                     } else if ((orderMonth > orderYear && orderMonth < 
>orderDay)) {
>   -                        var iDelim1 = orderYear + YEAR.length;
>   -                        var iDelim2 = orderMonth + MONTH.length;
>   -                        var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
>   -                        var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
>   -
>   -                        if (iDelim1 == orderMonth && iDelim2 == orderDay) {
>   -                           dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
>   -                        } else if (iDelim1 == orderMonth) {
>   -                           dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 
>+ "](\\d{2})$");
>   -                        } else if (iDelim2 == orderDay) {
>   -                           dateRegexp = new RegExp("^(\\d{4})[" + delim1 + 
>"](\\d{2})(\\d{2})$");
>   -                        } else {
>   -                           dateRegexp = new RegExp("^(\\d{4})[" + delim1 + 
>"](\\d{2})[" + delim2 + "](\\d{2})$");
>   -                        }
>   -
>   -                        var matched = dateRegexp.exec(value);
>   -
>   -                        if(matched != null) {
>   -
>   -                           if (!isValidDate(matched[3], matched[2], matched[1])) {
>   -                              if (i == 0)
>   -                                 focusField = form[oDate[x][0]];
>   -
>   -                              fields[i++] = oDate[x][1];
>   -                              bValid =  false;
>   -                           }
>   -                        } else {
>   -                           if (i == 0)
>   -                              focusField = form[oDate[x][0]];
>   -
>   -                           fields[i++] = oDate[x][1];
>   -                           bValid =  false;
>   -                        }
>   -                     } else {
>   -                        if (i == 0)
>   -                           focusField = form[oDate[x][0]];
>   -
>   -                        fields[i++] = oDate[x][1];
>   -                        bValid =  false;
>   -                     }
>   -
>   -                  }
>   -               }
>   -
>   -               if (fields.length > 0) {
>   -                  focusField.focus();
>   -                  alert(fields.join('\n'));
>   -               }
>   -
>   -               return bValid;
>   -            }
>   -
>   -       function isValidDate(day, month, year) {
>   -          if (month < 1 || month > 12)
>   -             return false;
>   -
>   -          if (day < 1 || day > 31)
>   -             return false;
>   -
>   -          if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 
>31)
>   -             return false;
>   -
>   -          if (month == 2) {
>   -             var leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
>   -             if (day>29 || (day == 29 && !leap))
>   -                return false;
>   -          }
>   -
>   -          return true;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="range"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateRange"
>   -                 depends="required,integer"
>   -                 msg="errors.range">
>   -         <javascript><![CDATA[
>   -            function validateRange(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oRange = new range();
>   -
>   -                for (x in oRange) {
>   -                    if ((form[oRange[x][0]].type == 'text' || 
>form[oRange[x][0]].type == 'textarea') && form[oRange[x][0]].value.length > 0) {
>   -                       var iMin = parseInt(oRange[x][2]("min"));
>   -                       var iMax = parseInt(oRange[x][2]("max"));
>   -                       var iValue = parseInt(form[oRange[x][0]].value);
>   -
>   -                       if (!(iValue >= iMin && iValue <= iMax)) {
>   -                          if (i == 0)
>   -                             focusField = form[oRange[x][0]];
>   -
>   -                          fields[i++] = oRange[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="creditCard"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateCreditCard"
>   -                 depends="required"
>   -                 msg="errors.creditcard">
>   -         <javascript><![CDATA[
>   -            function validateCreditCard(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oCreditCard = new creditCard();
>   -
>   -                for (x in oCreditCard) {
>   -                    if ((form[oCreditCard[x][0]].type == 'text' || 
>form[oCreditCard[x][0]].type == 'textarea') && form[oCreditCard[x][0]].value.length > 
>0) {
>   -                       if (!luhnCheck(form[oCreditCard[x][0]].value)) {
>   -                          if (i == 0)
>   -                             focusField = form[oCreditCard[x][0]];
>   -
>   -                          fields[i++] = oCreditCard[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }
>   -
>   -            /**
>   -             * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
>   -            */
>   -            function luhnCheck(cardNumber) {
>   -                if (isLuhnNum(cardNumber)) {
>   -                    var no_digit = cardNumber.length;
>   -                    var oddoeven = no_digit & 1;
>   -                    var sum = 0;
>   -                    for (var count = 0; count < no_digit; count++) {
>   -                        var digit = parseInt(cardNumber.charAt(count));
>   -                        if (!((count & 1) ^ oddoeven)) {
>   -                            digit *= 2;
>   -                            if (digit > 9) digit -= 9;
>   -                        };
>   -                        sum += digit;
>   -                    };
>   -                    if (sum == 0) return false;
>   -                    if (sum % 10 == 0) return true;
>   -                };
>   -                return false;
>   -            }
>   -
>   -            function isLuhnNum(argvalue) {
>   -                argvalue = argvalue.toString();
>   -                if (argvalue.length == 0)
>   -                   return false;
>   -                for (var n = 0; n < argvalue.length; n++)
>   -                   if (argvalue.substring(n, n+1) < "0" || 
>argvalue.substring(n,n+1) > "9")
>   -                      return false;
>   -
>   -                return true;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>   -
>   -      <validator name="email"
>   -                 classname="org.apache.struts.validator.util.StrutsValidator"
>   -                 method="validateEmail"
>   -                 depends="required"
>   -                 msg="errors.email">
>   -         <javascript><![CDATA[
>   -            function validateEmail(form) {
>   -                var bValid = true;
>   -                var focusField = null;
>   -                var i = 0;
>   -                var fields = new Array();
>   -                oEmail = new email();
>   -
>   -                for (x in oEmail) {
>   -                    if ((form[oEmail[x][0]].type == 'text' || 
>form[oEmail[x][0]].type == 'textarea') && form[oEmail[x][0]].value.length > 0) {
>   -                       if (!checkEmail(form[oEmail[x][0]].value)) {
>   -                          if (i == 0)
>   -                             focusField = form[oEmail[x][0]];
>   -
>   -                          fields[i++] = oEmail[x][1];
>   -
>   -                          bValid = false;
>   -                       }
>   -                    }
>   -                }
>   -
>   -                if (fields.length > 0) {
>   -                   focusField.focus();
>   -                   alert(fields.join('\n'));
>   -                }
>   -
>   -                return bValid;
>   -            }
>   -
>   -            /**
>   -             * Reference: Sandeep V. Tamhankar ([EMAIL PROTECTED]),
>   -             * http://javascript.internet.com
>   -            */
>   -            function checkEmail(emailStr) {
>   -               if (emailStr.length == 0)
>   -                  return true;
>   -               var emailPat=/^(.+)@(.+)$/;
>   -               var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
>   -               var validChars="\[^\\s" + specialChars + "\]";
>   -               var quotedUser="(\"[^\"]*\")";
>   -               var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
>   -               var atom=validChars + '+';
>   -               var word="(" + atom + "|" + quotedUser + ")";
>   -               var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
>   -               var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
>   -               var matchArray=emailStr.match(emailPat);
>   -
>   -               if (matchArray == null)
>   -                  return false;
>   -
>   -               var user=matchArray[1];
>   -               var domain=matchArray[2];
>   -
>   -               if (user.match(userPat) == null)
>   -                   return false;
>   -
>   -               var IPArray = domain.match(ipDomainPat);
>   -               if (IPArray != null) {
>   -                   for (var i = 1; i <= 4; i++) {
>   -                      if (IPArray[i] > 255)
>   -                         return false;
>   -                   }
>   -
>   -                   return true;
>   -               }
>   -
>   -               var domainArray=domain.match(domainPat);
>   -               if (domainArray == null)
>   -                   return false;
>   -
>   -               var atomPat=new RegExp(atom,"g");
>   -               var domArr=domain.match(atomPat);
>   -               var len=domArr.length;
>   -
>   -               if (domArr[domArr.length-1].length < 2 || 
>domArr[domArr.length-1].length > 3)
>   -                  return false;
>   -
>   -               if (len < 2)
>   -                  return false;
>   -
>   -               return true;
>   -            }]]>
>   -         </javascript>
>   -      </validator>
>       </global>
>       <formset>
>          <constant name="zip" value="^\d{5}(-\d{4})?$" />
>
>
>
>   1.3       +4 -0      jakarta-struts/contrib/validator/web/example/WEB-INF/web.xml
>
>   Index: web.xml
>   ===================================================================
>   RCS file: /home/cvs/jakarta-struts/contrib/validator/web/example/WEB-INF/web.xml,v
>   retrieving revision 1.2
>   retrieving revision 1.3
>   diff -u -r1.2 -r1.3
>   --- web.xml 15 Jan 2002 03:57:40 -0000      1.2
>   +++ web.xml 15 Jan 2002 06:24:59 -0000      1.3
>   @@ -10,6 +10,10 @@
>        <servlet-name>validator</servlet-name>
>        
><servlet-class>org.apache.struts.validator.action.ValidatorServlet</servlet-class>
>        <init-param>
>   +      <param-name>config-rules</param-name>
>   +      <param-value>/WEB-INF/validator-rules.xml</param-value>
>   +    </init-param>
>   +    <init-param>
>          <param-name>config</param-name>
>          <param-value>/WEB-INF/validation.xml</param-value>
>        </init-param>
>
>
>
>
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to