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]