According to the docs for DynaActionForm, you indicate a property is indexed
by putting [] after the type name. What I think is going on is that the
property is not initalized when the iterator tries to access it, thus the
'No collection found'. But I don't know how to set this up so it works
correctly. Since Struts seems to handle just about everything else, it'd
surprise me if you couldn't iterate over a dynamic form property in order to
setup inputs.

thx

-----Original Message-----
From: Karr, David [mailto:david.karr@;attws.com]
Sent: Wednesday, November 13, 2002 18:02
To: Struts Users Mailing List
Subject: RE: indexed properties and form help needed


At end.

> -----Original Message-----
> From: Andy Kriger [mailto:akriger@;greaterthanone.com]
>
> I have a DynaActionForm collecting credit card info. A user
> can enter up to
> 3 credit cards on the form. I want to collect this info in
> the text fields
> and create new CreditCard objects automatically; ideally, I
> would get a
> CreditCard[3] once the form is submitted (optionally an
> ArrayList would be
> fine). I would like to use indexed properties (right now I'm
> using hard
> coded property names), but I cannot figure out how to set this up.
>
> I am getting either a 'No collection found' error or a
> 'Cannot iterate over
> collection' error (depending on how I mess with this).
>
> What follows is rough code of what I'm trying to do.
>
> A CreditCard object has 5 fields with get/set methods for
> each: type, name,
> number, expMonth, expYear.
>
> <!-- JSP -->
> <html:form method='post' action='doSomething'>
> <logic:iterate id='index' property='creditCard'
> name='registrationForm'
> length='3'>
>       <html:select property='creditCard.type' name='index'
> indexed='true'>
>               <!-- some options -->
>       </html:select>
>       <html:text property='creditCard.name' name='index'
> indexed='true'>
>       <html:text property='creditCard.number' name='index'
> indexed='true'>
>       <html:text property='creditCard.expMonth' name='index'
> indexed='true'>
>       <html:text property='creditCard.expYear' name='index'
> indexed='true'>
> </logic:iterate>
> </html:form>
> <!-- Note: I have tried html:text with property='creditCard.field' and
> property='field' Neither worked -->
>
> <!-- struts-config.xml -->
> <form-bean name='registrationForm' type='DynaValidatorForm
> dynamic='true'>
>       <form-property name='creditCard'
> type='my.package.CreditCard[]'/>
> </form-bean>

Note that I haven't compiled or run any of this.

I would first expect my loop to look more like this:

<logic:iterate id='creditCard' property='creditCards'
name='registrationForm'
               length='3'>
 <html:select name='creditCard' property='type' indexed='true'>
  <!-- some options -->
 </html:select>
 <html:text name='creditCard' property='name' indexed='true'/>
 <html:text name='creditCard' property='number' indexed='true'/>
 <html:text name='creditCard' property='expMonth' indexed='true'/>
 <html:text name='creditCard' property='expYear' indexed='true'/>
</logic:iterate>

I would have accessors for "name", "number", "expMonth" and "expYear" in the
CreditCard class.

At that point, I scratch my head, because I don't know how to represent
indexed properties in DynaActionForms.  With a regular ActionForm, I would
have the following in my "registrationForm" bean:

    public  CreditCard getCreditCard(int index) { return
(creditCards[index]); }
    public  void  setCreditCard(int index, CreditCard creditCard) {
creditCard[index] = creditCard; }
    public  CreditCard[] getCreditCards() { return (creditCards); }

--
To unsubscribe, e-mail:
<mailto:struts-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail:
<mailto:struts-user-help@;jakarta.apache.org>



--
To unsubscribe, e-mail:   <mailto:struts-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>

Reply via email to