I found why is it giving javascript error... Because, when struts generates javascript code in jsp... Instead of generating required() method it generates xForm_required() method. This method is internally called by validateRequired() method.
Attached is the generated struts javascript code <script type="text/javascript" language="Javascript1.1"> <!-- Begin var bCancel = false; function validateLoginForm(form) { if (bCancel) return true; else var formValidationResult; formValidationResult = validateRequired(form); return (formValidationResult == 1); } function loginForm_required () { this.a0 = new Array("j_username", "null is required.", new Function ("varName", " return this[varName];")); this.a1 = new Array("j_password", "null is required.", new Function ("varName", " return this[varName];")); } function validateFloat18(form) { var bValid = true; var focusField = null; var i = 0; var fields = new Array(); oFloat = new FloatValidations18(); for (x in oFloat) { var field = form[oFloat[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'select-one' || field.type == 'radio') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = trim( field.options[si].value ); } } else { value = field.value; value = trim(value); } if( isValidDecimal( value ) ) { if ( value.length > 0 ) { // remove '.' before checking digits var tempArray = value.split('.'); var joinedString= tempArray.join(''); if (!isAllDigits(joinedString)) { bValid = false; if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; } else { var iValue = parseFloat(value); if (isNaN(iValue)|| !(iValue >= 0 && iValue < 1000000000000000 )) { if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; bValid = false; } } } } else { if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; bValid = false; } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return bValid; } function isValidDecimal(val) { var i = val.indexOf("."); if ( i == -1 ) { return true; } var afterDecimal = val.substring(i+1); if( isAllDigits(afterDecimal) && ( afterDecimal.length <= 3 ) ) { return true; } return false; } function validateMaxLength(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); oMaxLength = new maxlength(); for (x in oMaxLength) { var field = form[oMaxLength[x][0]]; if (field.type == 'text' || field.type == 'textarea') { var iMax = parseInt(oMaxLength[x][2]("maxlength")); if (field.value.length > iMax) { if (i == 0) { focusField = field; } fields[i++] = oMaxLength[x][1]; isValid = false; } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return isValid; } function validateRequired(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); oRequired = new required(); for (x in oRequired) { var field = form[oRequired[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'file' || field.type == 'select-one' || field.type == 'radio' || field.type == 'password') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = field.options[si].value; } } else { value = field.value; } if (trim(value).length == 0) { if (i == 0) { focusField = field; } fields[i++] = oRequired[x][1]; isValid = false; } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return isValid; } // Trim whitespace from left and right sides of s. function trim(s) { return s.replace( /^\s*/, "" ).replace( /\s*$/, "" ); } function validateInteger(form) { var bValid = true; var focusField = null; var i = 0; var fields = new Array(); oInteger = new IntegerValidations(); for (x in oInteger) { var field = form[oInteger[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'select-one' || field.type == 'radio') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = field.options[si].value; value = trim(value); } } else { value = field.value; value = trim(value); } if (value.length > 0) { if (!isAllDigits(value)) { bValid = false; if (i == 0) { focusField = field; } fields[i++] = oInteger[x][1]; } else { var iValue = parseInt(value); if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) { if (i == 0) { focusField = field; } fields[i++] = oInteger[x][1]; bValid = false; } } } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return bValid; } function isAllDigits(argvalue) { argvalue = argvalue.toString(); var validChars = "0123456789"; var startFrom = 0; if (argvalue.charAt(0) == "-") { startFrom = 1; } for (var n = startFrom; n < argvalue.length; n++) { if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false; } return true; } function validateFloat(form) { var bValid = true; var focusField = null; var i = 0; var fields = new Array(); oFloat = new FloatValidations(); for (x in oFloat) { var field = form[oFloat[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'select-one' || field.type == 'radio') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = trim( field.options[si].value ); } } else { value = field.value; value = trim(value); } if (value.length > 0) { // remove '.' before checking digits var tempArray = value.split('.'); var joinedString= tempArray.join(''); if (!isAllDigits(joinedString)) { bValid = false; if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; } else { var iValue = parseFloat(value); if (isNaN(iValue)) { if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; bValid = false; } } } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return bValid; } function validateFloat15(form) { var bValid = true; var focusField = null; var i = 0; var fields = new Array(); oFloat = new FloatValidations15(); for (x in oFloat) { var field = form[oFloat[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'select-one' || field.type == 'radio') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = trim( field.options[si].value ); } } else { value = field.value; value = trim(value); } if( isValidDecimal( value ) ) { if ( value.length > 0 ) { // remove '.' before checking digits var tempArray = value.split('.'); var joinedString= tempArray.join(''); if (!isAllDigits(joinedString)) { bValid = false; if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; } else { var iValue = parseFloat(value); if (isNaN(iValue)|| !(iValue >= 0 && iValue < 1000000000000 ) ) { if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; bValid = false; } } } } else { if (i == 0) { focusField = field; } fields[i++] = oFloat[x][1]; bValid = false; } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return bValid; } function validateMask(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); oMasked = new mask(); for (x in oMasked) { var field = form[oMasked[x][0]]; if ((field.type == 'text' || field.type == 'textarea') && (field.value.length > 0)) { if (!matchPattern(trim(field.value), oMasked[x][2]("mask"))) { if (i == 0) { focusField = field; } fields[i++] = oMasked[x][1]; isValid = false; } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return isValid; } function matchPattern(value, mask) { return mask.exec(value); } 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(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } 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; } function validateMinLength(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); oMinLength = new minlength(); for (x in oMinLength) { var field = form[oMinLength[x][0]]; if (field.type == 'text' || field.type == 'textarea') { var iMin = parseInt(oMinLength[x][2]("minlength")); if ((trim(field.value).length > 0) && (field.value.length < iMin)) { if (i == 0) { focusField = field; } fields[i++] = oMinLength[x][1]; isValid = false; } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return isValid; } function validateLong(form) { var bValid = true; var focusField = null; var i = 0; var fields = new Array(); oLong = new LongValidations(); for (x in oLong) { var field = form[oLong[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'select-one' || field.type == 'radio') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = trim( field.options[si].value ); } } else { value = trim( field.value ); } if (value.length > 0) { if (!isAllDigits(value)) { bValid = false; if (i == 0) { focusField = field; } fields[i++] = oLong[x][1]; } else { var longValue = parseFloat(value); if (isNaN(longValue) || !(longValue >= 0 && longValue <= 9223372036854775807)) { if (i == 0) { focusField = field; } fields[i++] = oLong[x][1]; bValid = false; } } } } } if (fields.length > 0) { focusField.focus(); if (focusField.type == 'text' || focusField.type == 'textarea' || focusField.type == 'password') { focusField.select(); } alert(fields.join('\n')); } return bValid; } //End --> <script> Now problem is, how do I make struts generate required() method instead of xForm_required() method. I am using struts 1.1. Thanks Guna -----Original Message----- From: Kote, Nijaguna Sangankal Sent: Friday, July 02, 2004 12:08 PM To: [EMAIL PROTECTED] Subject: Javascript error in struts validator. Hi All, I had posted this question, but got now answer. Please give me some hints on this. I am getting javascript error when I click on submit to validate my form. It's a simple login page with username and password. here is the code for login.jsp <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% response.setHeader("pragma", "no-cache"); response.setHeader("Cache-control", "no-cache, no-store"); response.setHeader("Expires", "0"); %> <html:html locale="true"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="../css/asianet.css" type=text/css rel=stylesheet> <title><bean:message key="title.login"/></title> <html:javascript formName="loginForm"/> - This is how I am including the Javascript for validation. </head> ........................................... Rest body code goes here. </html:html> This is my validation.xml file <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd"> <form-validation> <formset> <form name="loginForm"> <field property="j_username" depends="required"> <arg0 key="prompt.userid"/> </field> <field property="j_password" depends="required"> <arg0 key="prompt.password"/> </field> </form> </formset> </form-validation> And validation-rules.xml file <form-validation> <global> <validator name="required" classname="org.apache.struts.validator.FieldChecks" method="validateRequired" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest" msg="errors.required"> <javascript><![CDATA[ function validateRequired(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); oRequired = new required(); //-> here is the error. for (x in oRequired) { var field = form[oRequired[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'file' || field.type == 'select-one' || field.type == 'radio' || field.type == 'password') { .............................. Rest Now when I load my jsp, struts generates javascript with validateLoginForm( document.loginForm )mehtod. But, when I click on submit button. I get javascript error saying "required is undefined" and it points to the above bold line in Validation-rules.xml file. I am not able to figure out why, any ideas or hints on this would help me a lot. Thanks Guna --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]