Jeff, Are you trying both server side validation and client-side validation? I.E. html:javascript formName="..." etc... What version of Struts are you using?
Regards, David -----Original Message----- From: Jeff Smith [mailto:[EMAIL PROTECTED] Sent: Sunday, November 21, 2004 11:59 PM To: Struts Users Mailing List Subject: Re: Multi-Page Wizard Validation Problem David, Yes reg.step1, reg.step2 and reg.step3 all have hiddens for page and they're set accordingly. 1 for reg.step1, etc. And yes, they're tiles. As for the /reg/registration action, that was a bit of a typo that I accidentally left in there from a trial and error session. The actual action should read like this: <action path="/reg/registration" forward="reg.step1"> </action> Also, the other actions would be more aptly named something like processStep1 instead of step1, but you get the gist. So the problem remains, next and previous work great but I get no validation between the pages. I did fix the page number not being set by adding a page to the form bean definition, this appears to work now and the DynaActionValidatorForm invokes the setPageFromDynaProperty method with the correct value. So half of the problem is fixed :) Its just the validation that remains. -jeff On Nov 21, 2004, at 9:27 PM, David G. Friedman wrote: > Jeff, > > Do the pages reg.step1, reg.step2, and reg.step3 all do an html hidden > tag > for the page variable such as: > <html:hidden name="page" value="X" /> > > Substitute X for the appropriate page number. > > Also, I think you have an infinite loop when you set the > "/reg/registration" > action to call it's own action upon validation failure (the input="..." > attribute). Shouldn't you set it to reg.step1 if validation fails? > I'm > assuming reg.step1, reg.step2, and reg.step3 are tiles. > > Additionally, calling a *.do Struts action from within another struts > action > is not the wisest course of action UNLESS you are doing a > redirect="true" on > your forward. Without the redirect="true", Struts will perform the > whole > set of preprocessing again when the new *.do action is invoked. This > repeats everything struts ALREADY performed to get to your first > action. > Essentially, it is a big waste of time/resources/cpu. > > Regards, > David > > -----Original Message----- > From: Jeff Smith [mailto:[EMAIL PROTECTED] > Sent: Sunday, November 21, 2004 2:15 PM > To: Struts Users Mailing List > Subject: Re: Multi-Page Wizard Validation Problem > > > Let me paste the files in instead > > -- struts config starts here -- > > <?xml version="1.0" encoding="iso-8859-1"?> > <!DOCTYPE struts-config PUBLIC > "-//Apache Software Foundation//DTD Struts Configuration > 1.2//EN" > "http://struts.apache.org/dtds/struts-config_1_2.dtd"> > > <struts-config> > > <!-- > Form Bean Definitions > --> > <form-beans> > <form-bean name="registrationForm" > type="org.apache.struts.validator.DynaValidatorActionForm"> > <!-- Page One --> > <form-property name="firstName" type="java.lang.String"/> > <form-property name="middleName" type="java.lang.String"/> > <form-property name="lastName" type="java.lang.String"/> > <form-property name="username" type="java.lang.String"/> > <form-property name="password" type="java.lang.String"/> > <form-property name="password2" type="java.lang.String"/> > <!-- Page Two --> > <form-property name="birthDate" type="java.lang.String"/> > <!-- Page Three --> > <form-property name="street1" type="java.lang.String"/> > <form-property name="street2" type="java.lang.String"/> > <form-property name="city" type="java.lang.String"/> > <form-property name="state" type="java.lang.String"/> > <form-property name="country" type="java.lang.String"/> > <form-property name="postalCode" type="java.lang.String"/> > </form-bean> > </form-beans> > > <!-- > Action Mappings > --> > <action-mappings> > > <action path="/reg/step1" > parameter="command" > type="com.rochets.application.action.RegistrationAction" > name="registrationForm" > scope="session" > validate="true" > input="reg.step1"> > <forward name="next" path="reg.step2"/> > <forward name="cancel" > path="/WEB-INF/jsp/mywizardcancel.jsp"/> > </action> > > <action path="/reg/step2" > parameter="command" > type="com.rochets.application.action.RegistrationAction" > name="registrationForm" > scope="session" > validate="true" > input="reg.step2"> > <forward name="previous" path="reg.step1"/> > <forward name="next" path="reg.step3"/> > <forward name="finish" > path="/WEB-INF/jsp/mywizarddone.jsp"/> > <forward name="cancel" > path="/WEB-INF/jsp/mywizardcancel.jsp"/> > </action> > > <action path="/reg/step3" > parameter="command" > type="com.rochets.application.action.RegistrationAction" > name="registrationForm" > scope="session" > validate="true" > input="reg.step3"> > <forward name="previous" path="reg.step3"/> > <forward name="finish" > path="/WEB-INF/jsp/mywizarddone.jsp"/> > <forward name="cancel" > path="/WEB-INF/jsp/mywizardcancel.jsp"/> > </action> > > <action path="/reg/registration" > parameter="command" > name="registrationForm" > scope="session" > type="com.rochets.application.action.RegistrationAction" > validate="true" > input="/reg/registration.do"> > <forward name="next" path="reg.step1"/> > </action> > > </action-mappings> > > <message-resources parameter="resources.reg.Registration" > null="false"/> > > <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> > <set-property > property="pathnames" > value="/WEB-INF/struts/reg/validation.xml"/> > </plug-in> > > </struts-config> > > -- validation.xml starts here -- > <?xml version="1.0" encoding="iso-8859-1"?> > <!DOCTYPE form-validation PUBLIC > "-//Apache Software Foundation//DTD Commons Validator Rules > Configuration 1.1.3//EN" > > "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> > > <form-validation> > <formset> > <form name="registrationForm"> > <!-- Page One --> > <field property="firstName" > depends="required,mask,minlength,maxlength" page="1"> > <arg key="firstname" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>mask</var-name> > <var-value>^\w+$</var-value> > </var> > <var> > <var-name>minlength</var-name> > <var-value>2</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="middleName" depends="mask,maxlength" > page="1"> > <arg key="firstname" position="0"/> > <var> > <var-name>mask</var-name> > <var-value>^\w+$</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="lastName" > depends="required,mask,minlength,maxlength" page="1"> > <arg key="lastname" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>mask</var-name> > <var-value>^\w+$</var-value> > </var> > <var> > <var-name>minlength</var-name> > <var-value>2</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="username" > depends="required,maxlength,email" page="1"> > <arg key="username" position="0"/> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="password" > depends="required,minlength,maxlength,twofields" page="1"> > <arg key="password" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>6</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > <var> > <var-name>secondProperty</var-name> > <var-value>password2</var-value> > </var> > </field> > <field property="password2" > depends="required,minlength,maxlength" page="1"> > <arg key="password2" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>6</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > > <!-- Page Two --> > <field property="birthDate" depends="required,date" > page="2"> > <arg key="birthdate" position="0"/> > <var> > <var-name>datePatternStrict</var-name> > <var-value>MM/dd/yyyy</var-value> > </var> > </field> > <field property="weight" > depends="required,minlength,maxlength,integer" page="2"> > <arg key="weight" position="0"/> > <var> > <var-name>minlength</var-name> > <var-value>2</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>3</var-value> > </var> > </field> > <field property="goalWeight" > depends="required,minlength,maxlength,integer" page="2"> > <arg key="goalweight" position="0"/> > <var> > <var-name>minlength</var-name> > <var-value>2</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>3</var-value> > </var> > </field> > <field property="currentDaysPerWeek" > depends="required,maxlength,integer,intRange" page="2"> > <arg key="currentdaysperweek" position="0"/> > <var> > <var-name>min</var-name> > <var-value>0</var-value> > </var> > <var> > <var-name>max</var-name> > <var-value>7</var-value> > </var> > </field> > <field property="availableMinutesPerDay" > depends="required,maxlength,integer,intRange" page="2"> > <arg key="availableminutesperday" position="0"/> > <var> > <var-name>maxlength</var-name> > <var-value>3</var-value> > </var> > <var> > <var-name>min</var-name> > <var-value>30</var-value> > </var> > <var> > <var-name>max</var-name> > <var-value>60</var-value> > </var> > </field> > <field property="availableDays" depends="required" > page="2"> > <arg key="availabledays" position="0"/> > </field> > > <!-- Page Three --> > <field property="street1" > depends="required,minlength,maxlength" page="3"> > <arg key="street1" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>6</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="street1" depends="minlength,maxlength" > page="3"> > <arg key="street1" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>6</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="city" > depends="required,minlength,maxlength" page="3"> > <arg key="street1" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>2</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="state" > depends="required,minlength,maxlength" page="3"> > <arg key="state" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>2</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="country" > depends="required,minlength,maxlength" page="3"> > <arg key="country" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>6</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > <field property="postalCode" > depends="required,minlength,maxlength" page="3"> > <arg key="postalcode" position="0"/> > <arg name="minlength" key="${var:minlength}" > resource="false" position="1"/> > <var> > <var-name>minlength</var-name> > <var-value>5</var-value> > </var> > <var> > <var-name>maxlength</var-name> > <var-value>255</var-value> > </var> > </field> > </form> > </formset> > </form-validation> > > > > On Nov 21, 2004, at 12:07 PM, Jeff Smith wrote: > >> All, >> >> Sorry if this has been discussed, I've been digging around on the web >> and can't seem to find a solution to my problem. I have a 3 step >> registration process that works like a "wizard". I defined a >> LookupDispatchAction subclass to handle things like the next and >> previous button. Everything works great except validation never gets >> triggered and the page variable on the form bean is always reset to >> zero. I have confirmed with the debugger that it is the same instance >> of the form bean throughout the steps. I assume the two problems are >> related because my validation.xml specifies page numbers greater than >> zero. I've attached the struts-config.xml and the validation.xml. >> >> Any help is appreciated. >> >> -jeff >> >> >> >> --------------------------------------------------------------------- >> 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]