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]

Reply via email to