I'm trying only server side validation. I'm using struts 1.2.4.

-jeff

On Nov 21, 2004, at 10:19 PM, David G. Friedman wrote:

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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to