You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Amjad I. Shahrour" <am...@bt-at.com> on 2005/02/08 17:31:41 UTC

Struts validator [ client side error when using date validator]

Hi,

I have configured and used struts validator for my application, 
Server side validation is working perfectly...

 For client side, the required  validator is working fine, but the date
( for example) is not working and giving a java script error "
datePattern" has no properties.



Please help.


Thanx in advance
Amjad


--------------Snippet from validation.xml-----------------
<field
      property="startDate"
      depends="date">
      <arg0 key="label.startDate"/>
      <var>
	<var-name>datePattern</var-name>
	<var-value>dd/MM/yyyy</var-value>
       </var>
    </field>


--- Snippet from validation-rules.xml -- ----- --- ---
   <validator name="date"
            classname="org.apache.struts.validator.FieldChecks"
               method="validateDate"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionErrors,
                       javax.servlet.http.HttpServletRequest"
              depends=""
                  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>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts validator [ client side error when using date validator]

Posted by Saul Qunming Yuan <yu...@dataanvil.com>.
Off the top of my head, try using: datePatternStrict instead of
datePattern in <var-name> in your validation.xml.

Saul


> Hi,
>
> I have configured and used struts validator for my application,
> Server side validation is working perfectly...
>
>  For client side, the required  validator is working fine, but the date
> ( for example) is not working and giving a java script error "
> datePattern" has no properties.
>
>
>
> Please help.
>
>
> Thanx in advance
> Amjad
>
>
> --------------Snippet from validation.xml-----------------
> <field
>       property="startDate"
>       depends="date">
>       <arg0 key="label.startDate"/>
>       <var>
> 	<var-name>datePattern</var-name>
> 	<var-value>dd/MM/yyyy</var-value>
>        </var>
>     </field>
>
>
> --- Snippet from validation-rules.xml -- ----- --- ---
>    <validator name="date"
>             classname="org.apache.struts.validator.FieldChecks"
>                method="validateDate"
>          methodParams="java.lang.Object,
>                        org.apache.commons.validator.ValidatorAction,
>                        org.apache.commons.validator.Field,
>                        org.apache.struts.action.ActionErrors,
>                        javax.servlet.http.HttpServletRequest"
>               depends=""
>                   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>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org