You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Torsten Terp <to...@terps.dk> on 2001/07/01 20:00:35 UTC

Problems with iterate

Hi,

Sorry if this has been answered before, but i havent been able to find an answer!

Im using iterate to display a vector containg valueobjects, i.e., 

<html:form action="showContacts">
<logic:iterate id="contacts" name="form" property="contactDataVector">
<html:hidden name="contacts" property="contactId"/>
<tr>
  <td width="150">	
    <html:text name="contacts" property="firstName" size="20"/>
  </td>
  <td width="150">
    <html:text name="contacts" property="lastName" size="20"/>
  </td>
</tr>
...
...

'form' is my struts form bean, 'contactDataVector' is a vector of 'contactData'
objects each containing (among others) the variables 'firstName' and 'lastName'.

There is no problem in displaying the data, all goes well, but updating fields 
in the form is not working, when i want to save the changes in the struts action 
the vector is null! I can see that making a variable 'firstName' in the form, results
in a call to its setter method, i.e., i can make it work when updating a single row, 
but i cant manage to get the update to work on the actual contactData objects in the
vector. ?!?!

Any advices out there?? 

^terp


Re: Problems with iterate

Posted by suhas <su...@techmas.hcltech.com>.
Let us see if I got this .

getFirstName ( ) and getLastName( ) should be in the ContactData class and
not needed in the ActionForm

And in the Form bean one should have only getContactDataVector(int index)
method as u said .

In reset() method of the ActionForm u can instantiate the ContactData class
and vector of ContactData class if it is null  .
So that in the jsp file u can have contactDataVector[i].firstName and
contactDataVector[i].lastName fields .
I think when u submit <html:form> then automatically ur FormBean's
contactDataVector will be intialized
1. by calling reset method first where u intialize the vector of contactData
. Then
2. by populating the ActionForm data ( contactDataVector) with the values
from form fields

Please correct me if I'm wrong .

Suhas




----- Original Message -----
From: Niall Pemberton <ni...@btInternet.com>
To: <st...@jakarta.apache.org>
Sent: Sunday, July 01, 2001 11:56 PM
Subject: RE: Problems with iterate


> You need to do two things.
>
> First, you need to generate appropriate names for your input fields. If
you
> use the current Struts tags then all the occurances of your two fields in
> the example below will generate names of "firstName" and "lastName". What
> you want is to generate names in the format
"contactDataVector[x].firstName"
> and "contactDataVector[x].lastName", where x is the index number of the
> field. Dave Hay has posted a set of modified Struts tags which generate
> these names on Ted Husted's site:
>   http://www.husted.com/about/struts/resources.htm#extensions  - "Indexed
> Tags"
>
> Secondly you need to provide the appropriate getters/setters in your bean
> and ActionForm. Obviously in your bean you need setFirstName() and
> setLastName() methods - additionally you need the following getter in your
> ActionForm:
>
>   public ContactData getContactDataVector(int index) {
>
>      return (ContactData)(contactDataVector.get(index));
>
>   }
>
> Hope this helps.
>
>
> Niall
>
>
>
> > -----Original Message-----
> > From: Torsten Terp [mailto:torsten@terps.dk]
> > Sent: 01 July 2001 19:01
> > To: Struts user list
> > Subject: Problems with iterate
> >
> >
> > Hi,
> >
> > Sorry if this has been answered before, but i havent been able to
> > find an answer!
> >
> > Im using iterate to display a vector containg valueobjects, i.e.,
> >
> > <html:form action="showContacts">
> > <logic:iterate id="contacts" name="form" property="contactDataVector">
> > <html:hidden name="contacts" property="contactId"/>
> > <tr>
> >   <td width="150">
> >     <html:text name="contacts" property="firstName" size="20"/>
> >   </td>
> >   <td width="150">
> >     <html:text name="contacts" property="lastName" size="20"/>
> >   </td>
> > </tr>
> > ...
> > ...
> >
> > 'form' is my struts form bean, 'contactDataVector' is a vector of
> > 'contactData'
> > objects each containing (among others) the variables 'firstName'
> > and 'lastName'.
> >
> > There is no problem in displaying the data, all goes well, but
> > updating fields
> > in the form is not working, when i want to save the changes in
> > the struts action
> > the vector is null! I can see that making a variable 'firstName'
> > in the form, results
> > in a call to its setter method, i.e., i can make it work when
> > updating a single row,
> > but i cant manage to get the update to work on the actual
> > contactData objects in the
> > vector. ?!?!
> >
> > Any advices out there??
> >
> > ^terp
> >


RE: Problems with iterate

Posted by Torsten Terp <to...@terps.dk>.
Hi,

Thanks for replying... I did stumble onto the index extension 
in my search, but i thought i could manage without! 

I will try to do as you describes, thanks a lot!

^terp

> -----Original Message-----
> From: Niall Pemberton [mailto:niall.pemberton@btInternet.com]
> Sent: Monday, July 02, 2001 12:57 AM
> To: struts-user@jakarta.apache.org
> Subject: RE: Problems with iterate
> 
> 
> You need to do two things.
> 
> First, you need to generate appropriate names for your input fields. If you
> use the current Struts tags then all the occurances of your two fields in
> the example below will generate names of "firstName" and "lastName". What
> you want is to generate names in the format "contactDataVector[x].firstName"
> and "contactDataVector[x].lastName", where x is the index number of the
> field. Dave Hay has posted a set of modified Struts tags which generate
> these names on Ted Husted's site:
>   http://www.husted.com/about/struts/resources.htm#extensions  - "Indexed
> Tags"
> 
> Secondly you need to provide the appropriate getters/setters in your bean
> and ActionForm. Obviously in your bean you need setFirstName() and
> setLastName() methods - additionally you need the following getter in your
> ActionForm:
> 
>   public ContactData getContactDataVector(int index) {
> 
>      return (ContactData)(contactDataVector.get(index));
> 
>   }
> 
> Hope this helps.
> 
> 
> Niall
> 
> 
> 
> > -----Original Message-----
> > From: Torsten Terp [mailto:torsten@terps.dk]
> > Sent: 01 July 2001 19:01
> > To: Struts user list
> > Subject: Problems with iterate
> >
> >
> > Hi,
> >
> > Sorry if this has been answered before, but i havent been able to
> > find an answer!
> >
> > Im using iterate to display a vector containg valueobjects, i.e.,
> >
> > <html:form action="showContacts">
> > <logic:iterate id="contacts" name="form" property="contactDataVector">
> > <html:hidden name="contacts" property="contactId"/>
> > <tr>
> >   <td width="150">
> >     <html:text name="contacts" property="firstName" size="20"/>
> >   </td>
> >   <td width="150">
> >     <html:text name="contacts" property="lastName" size="20"/>
> >   </td>
> > </tr>
> > ...
> > ...
> >
> > 'form' is my struts form bean, 'contactDataVector' is a vector of
> > 'contactData'
> > objects each containing (among others) the variables 'firstName'
> > and 'lastName'.
> >
> > There is no problem in displaying the data, all goes well, but
> > updating fields
> > in the form is not working, when i want to save the changes in
> > the struts action
> > the vector is null! I can see that making a variable 'firstName'
> > in the form, results
> > in a call to its setter method, i.e., i can make it work when
> > updating a single row,
> > but i cant manage to get the update to work on the actual
> > contactData objects in the
> > vector. ?!?!
> >
> > Any advices out there??
> >
> > ^terp
> >
> 
> 
> 


RE: Problems with iterate

Posted by Niall Pemberton <ni...@btInternet.com>.
You need to do two things.

First, you need to generate appropriate names for your input fields. If you
use the current Struts tags then all the occurances of your two fields in
the example below will generate names of "firstName" and "lastName". What
you want is to generate names in the format "contactDataVector[x].firstName"
and "contactDataVector[x].lastName", where x is the index number of the
field. Dave Hay has posted a set of modified Struts tags which generate
these names on Ted Husted's site:
  http://www.husted.com/about/struts/resources.htm#extensions  - "Indexed
Tags"

Secondly you need to provide the appropriate getters/setters in your bean
and ActionForm. Obviously in your bean you need setFirstName() and
setLastName() methods - additionally you need the following getter in your
ActionForm:

  public ContactData getContactDataVector(int index) {

     return (ContactData)(contactDataVector.get(index));

  }

Hope this helps.


Niall



> -----Original Message-----
> From: Torsten Terp [mailto:torsten@terps.dk]
> Sent: 01 July 2001 19:01
> To: Struts user list
> Subject: Problems with iterate
>
>
> Hi,
>
> Sorry if this has been answered before, but i havent been able to
> find an answer!
>
> Im using iterate to display a vector containg valueobjects, i.e.,
>
> <html:form action="showContacts">
> <logic:iterate id="contacts" name="form" property="contactDataVector">
> <html:hidden name="contacts" property="contactId"/>
> <tr>
>   <td width="150">
>     <html:text name="contacts" property="firstName" size="20"/>
>   </td>
>   <td width="150">
>     <html:text name="contacts" property="lastName" size="20"/>
>   </td>
> </tr>
> ...
> ...
>
> 'form' is my struts form bean, 'contactDataVector' is a vector of
> 'contactData'
> objects each containing (among others) the variables 'firstName'
> and 'lastName'.
>
> There is no problem in displaying the data, all goes well, but
> updating fields
> in the form is not working, when i want to save the changes in
> the struts action
> the vector is null! I can see that making a variable 'firstName'
> in the form, results
> in a call to its setter method, i.e., i can make it work when
> updating a single row,
> but i cant manage to get the update to work on the actual
> contactData objects in the
> vector. ?!?!
>
> Any advices out there??
>
> ^terp
>