Hi Laurie,

Thanks for the suggestion!

After digging into the Tomcat console logs, I've finally found out
what the problem is. Seems like my copy of validation-rules.xml was
corrupted. The arguments for the validateRequired method were wrong.
Corrected that and now it works fine :-)

Thanks for the reminder though on the tpye-casting for the form. That
could save me a lot of brain-cells some time down the line...

Weng Kong Lee

On 9/12/05, Laurie Harper <[EMAIL PROTECTED]> wrote:
> You probably need your form to be declared as type
> org.apache.struts.action.DynaActionForm (rather than DynaValidatorForm).
> The difference between their behaviour is a little subtle so it's easy
> to get them mixed up. Try changing it and see if it works.
> 
> L.
> 
> Weng Kong Lee wrote:
> > Hi all,
> > I've just started exploring the use of Struts DynaValidatorForms. I've
> > tried to set-up a very simple login form with a username and password
> > fields, where both are required. Here's the relevant details:
> >
> > 1. struts-config.xml
> > The application message resource bundle has been configured with the
> > required validation messages for the validation framework, and the
> > validator plugin is also declared.
> > I declared a form bean as follows:
> > <form-bean name="loginForm"
> > type="org.apache.struts.validator.DynaValidatorForm">form-bean
> > name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
> > <form-property name="password" type="java.lang.String" />
> > <form-property name="userName" type="java.lang.String" />
> > <form-property name="userName" type="java.lang.String" />
> > </form-bean>
> > Then I declared a action tied to the form bean as follows:
> > <action
> >       attribute="loginForm"
> >       input="/login.jsp"
> >       name="loginForm"
> >       path="/login"
> >       scope="request"
> >       type="project.struts.actions.LoginAction"
> >       validate="true">
> >       <forward name="success" path="/index.jsp" redirect="true"/>
> >       <forward name="failure" path="/login.jsp" redirect="true"/>
> > </action>
> >
> > 2. login.jsp
> > This is the JSP with the form. It uses both client and server-side
> > validation.The code is as follows:
> > <body>
> > <html:errors/>
> >     <html:form action="login" method="post" focus="userName"
> > onsubmit="return validateLoginForm(this);">
> >       <table border="0">
> >         <tr>
> >           <td>Login:</td>
> >           <td><html:text property="userName" /></td>
> >         </tr>
> >         <tr>
> >           <td>Password:</td>
> >           <td><html:password property="password" /></td>
> >         </tr>
> >         <tr>
> >           <td colspan="2" align="center"><html:submit value="Login"/></td>
> >         </tr>
> >       </table>
> >     </html:form>
> >     <html:javascript formName="loginForm"/>
> > </body>
> >
> > 3. validation.xml
> > I declared both the "userName" and the "password" fields to be
> > "required", as follows:
> > <formset>
> > <form name="loginForm">
> >     <field property="userName" depends="required">
> >         <arg0 name="required" key="loginForm.userName"/>
> >     </field>
> >     <field property="password" depends="required">
> >         <arg0 name="required" key="loginForm.password"/>
> >     </field>
> > </form>
> > </formset>
> >
> > 4. Action class, LoginAction.java
> > Here's the execute mehod implementation. Basically, it rejects the
> > login when the userName and password are not both "test".
> > public ActionForward execute(ActionMapping mapping, ActionForm form,
> >                       HttpServletRequest request, HttpServletResponse 
> > response) {
> >     DynaValidatorForm loginForm = (DynaValidatorForm) form;
> >     String userName = loginForm.getString("userName");
> >     String password = loginForm.getString("password");
> >     if ((userName == null) || (!userName.equals("test"))) {
> >         return mapping.findForward("failure");
> >     } else if ((password == null) || (!password.equals("test"))) {
> >         return mapping.findForward("failure");
> >     } else {
> >         return mapping.findForward("success");
> >     }
> > }
> >
> > I then tried to test the above by deploying the application, hitting
> > login.jsp and attempting to login with invalid userName and password.
> > The Javascript validation works fine, and the messages display
> > correctly => The message resource is configured correctly.
> >
> > However when I turned off Javascript on my bowser to test the
> > server-side validation. The validation did not take place at all! If I
> > supplied a blank userName and/or password, it simply performs the
> > logic in LoginAction and sends me back to login.jsp, without any error
> > messages!
> >
> > Anyone has any ideas what I might have missed out here?
> >
> > Thanks in advance for any suggestions!
> >
> > Weng Kong Lee
> 
> 
> ---------------------------------------------------------------------
> 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]

Reply via email to