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