Hi all, It appears a faulty JavaScript function was being plugged in elsewhere in the application. This was causing JavaScript rendering errors when the page loaded. I've removed the faulty script and the client side validation works perfectly.
Thanks for all the suggestions Sean -----Original Message----- From: O'Shea, Sean Sent: Monday, August 14, 2006 10:32 AM To: user@struts.apache.org Subject: RE: JavaScript validation errors Hi Srinivas, I tried setting my login form like this: <html:form action="login" onsubmit="return validateLoginForm(this);"> ..... </html:form> <html:javascript formName="loginForm"/> ... Still no luck in getting the javascript function called though. I've checked the source of the generated page and it looks like the validateLoginForm function is getting generated: function validateLoginForm(form) { if (bCancel) return true; else var formValidationResult; formValidationResult = validateRequired(form); return (formValidationResult == 1); } function loginForm_required () { this.a0 = new Array("SSN", "SSN is required.", new Function ("varName", " return this[varName];")); this.a1 = new Array("password", "Password is required.", new Function ("varName", " return this[varName];")); } The generated validateRequired function looks like this: function validateRequired(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); var formName = form.getAttributeNode("name"); oRequired = eval('new ' + formName.value + '_required()'); ..... I'm guessing the intent of the eval('new ' + formName.value + '_required()'); line is to call the loginForm_required function? I made a little change to the validateRequired.js in the org.apache.commons.validator.javascript to alert when the function is called: /*$RCSfile: validateRequired.js,v $ $Revision: 1.13 $ $Date: 2004/03/28 16:53:21 $ */ /** * Check to see if fields must contain a value. * Fields are not checked if they are disabled. * <p> * @param form The form validation is taking place on. */ function validateRequired(form) { alert("Calling required ") ..... But this doesn't even get called. My browser says that there is an error on line 1081 on the page - looking at this line I see this: //End --> </script> My browser says it expects a '}' - it appears that there is a missing closing brace somewhere in the code? Has anyone else come across this problem? Thanks Sean -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Monday, August 14, 2006 5:39 AM To: Struts Users Mailing List Subject: RE: JavaScript validation errors Hi sean, i think if you put onsubmit="return validateLoginForm(this); it works fine with client(front-end validation)side and if you remove onsubmit from jsp then it works fine with server(backend validation)....may be this helps you Thanks, Srinivas. "O'Shea, Sean" <Sean.O'[EMAIL PROTECTED] com> To <user@struts.apache.org> 08/12/2006 12:11 cc AM Subject RE: JavaScript validation errors Please respond to "Struts Users Mailing List" <[EMAIL PROTECTED] he.org> Hi, I'm not writing the JavaScript code myself, so I cannot include a check like you suggested. The JavaScript is being automatically generated using the <html:javascript> tag. The generated validateRequired method is taken directly from the commons-validator.jar: function validateRequired(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); var formName = form.getAttributeNode("name"); oRequired = eval('new ' + formName.value + '_required()'); for (x in oRequired) { var field = form[oRequired[x][0]]; if ((field.type == 'hidden' || field.type == 'text' || field.type == 'textarea' || field.type == 'file' || field.type == 'checkbox' || field.type == 'select-one' || field.type == 'password') && field.disabled == false) { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = field.options[si].value; } } else if (field.type == 'checkbox') { if (field.checked) { value = field.value; } } else { value = field.value; } if (trim(value).length == 0) { if (i == 0) { focusField = field; } fields[i++] = oRequired[x][1]; isValid = false; } } else if (field.type == "select-multiple") { var numOptions = field.options.length; lastSelected=-1; for(loop=numOptions-1;loop>=0;loop--) { if(field.options[loop].selected) { lastSelected = loop; value = field.options[loop].value; break; } } if(lastSelected < 0 || trim(value).length == 0) { if(i == 0) { focusField = field; } fields[i++] = oRequired[x][1]; isValid=false; } } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) { isChecked=-1; for (loop=0;loop < field.length;loop++) { if (field[loop].checked) { isChecked=loop; break; // only one needs to be checked } } if (isChecked < 0) { if (i == 0) { focusField = field[0]; } fields[i++] = oRequired[x][1]; isValid=false; } } } if (fields.length > 0) { focusField.focus(); alert(fields.join('\n')); } return isValid; } // Trim whitespace from left and right sides of s. function trim(s) { return s.replace( /^\s*/, "" ).replace( /\s*$/, "" ); } Sean -----Original Message----- From: Monkeyden [mailto:[EMAIL PROTECTED] Sent: Friday, August 11, 2006 1:57 PM To: Struts Users Mailing List Subject: Re: JavaScript validation errors Are you returning false when there is an error in the validation? if(userName.trim().length() == 0){ alert("Pathetic, technologically inept users must enter a user name."); return false; } On 8/11/06, O'Shea, Sean <Sean.O'[EMAIL PROTECTED]> wrote: > > Hi Adam, > > I changed my login form to look like this: > > <html:form action="/login" method="POST" onsubmit="return > validateLoginForm(this);"> > <table border="0" cellspacing="5"> > <tr> > <th align="right"> > <bean:message key="login.ssn"/>: > </th> > <td align="left"> > <html:text property="SSN"/><bean:message > key="login.correctssn"/> > </td> > </tr> > <tr> > <th align="right"> > <bean:message key="login.password"/>: > </th> > <td align="left"> > <html:password property="password"/><bean:message > key="login.correctpw"/> > </td> > </tr> > <tr> > <td align="right"> > <input type="submit" value="<bean:message > key="login.button"/>"/> > </td> > <td align="left"> > <input type="reset"/> > </td> > </tr> > </table> > </html:form> > > But still no luck. My server side validation still works fine, but the > client side validation does not seem to execute. > Even when I look at the source for my JSP I can see the call to the > JavaScript function: > > <form name="loginForm" method="POST" action="/MySampleApp/sample/login" > onsubmit="return validateLoginForm(this);"> > > Its as if the variables are not getting loaded into the JavaScript > function, or the function is not getting called at all. > > Anyone have any ideas on this? > > Thanks again > > Sean > > > > -----Original Message----- > From: Adam Gordon [mailto:[EMAIL PROTECTED] > Sent: Friday, August 11, 2006 11:56 AM > To: Struts Users Mailing List > Subject: Re: JavaScript validation errors > > Sean- > > You need to add an "onsubmit" attribute to your html:form" element that > calls the validation function. Specifically, IIRC, it needs to say: > onsubmit="return validateForm(this); > > happy coding, > > -adam > > O'Shea, Sean wrote: > > Hi all, > > > > I'm using struts 1.2.7 with commons-validator-1.1.4 and I'm running > into > > a few generated JavaScript errors. Here's what my JSP looks like: > > > > <html:javascript formName="loginForm" /> > > <html:form action="/login" method="POST"> > > <table border="0" cellspacing="5"> > > <tr> > > <th align="right"> > > <bean:message key="login.ssn"/>: > > </th> > > <td align="left"> > > <html:text property="SSN"/><bean:message > > key="login.correctssn"/> > > </td> > > </tr> > > <tr> > > <th align="right"> > > <bean:message key="login.password"/>: > > </th> > > <td align="left"> > > <html:password property="password"/><bean:message > > key="login.correctpw"/> > > </td> > > </tr> > > <tr> > > <td align="right"> > > <input type="submit" value="<bean:message > > key="login.button"/>"/> > > </td> > > <td align="left"> > > <input type="reset"/> > > </td> > > </tr> > > </table> > > </html:form> > > > > Here's what my action mapping looks like: > > > > <action path="/login" name="loginForm" > > type="LoginAction" > > scope="request" validate="true" > > input="login"> > > ..... > > </action> > > > > This is what my form bean looks like: > > > > <form-bean name="loginForm" > > type="org.apache.struts.validator.DynaValidatorForm"> > > <form-property name="SSN" > > type="java.lang.String" /> > > <form-property name="password" > > type="java.lang.String" /> > > </form-bean> > > > > My form validations look like this: > > > > <form name="loginForm"> > > <field property="SSN" depends="required"> > > <arg key="login.ssn" position="0"/> > > </field> > > <field property="password" depends="required"> > > <arg key="login.password" position="0"/> > > </field> > > </form> > > > > When I try to submit my loginForm. my server die validations work > fine, > > but the JavaScript does not get executed. From looking at the > generated > > source I see this: > > > > <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("SSN", "SSN is required.", new Function > > ("varName", " return this[varName];")); > > this.a1 = new Array("password", "Password is required.", new > > Function ("varName", " return this[varName];")); > > } > > > > Either the JavaScript is not getting called, or the generated > JavaScript > > does not match up. Could it be something to do with the > html:javasctipt > > tag? Looking at the source I have for the JavascriptValidatorTag class > I > > see this version: > > > > * $Id: JavascriptValidatorTag.java 165208 2005-04-28 21:41:45Z mrdon > $ > > > > All help would be greatly appreciated. > > > > Thanks > > > > Sean > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]