Hi Mike
Thats easy.
Outer loop needs to specify the "indexId" parameter as in:
<logic:iterate name="applicationForm" property="familymembers" id="familymmber"
type="application.FamilyMember" indexId="memberIndex">
Then you can use whatever inner loop (or loops) you want.
<logic:iterate something else....>
Inside here you can refer to the 'memberIndex' as in:
<html:text name="familymembers[${memberIndex}].forename">
HTH
Cheers
mc
On 29 Oct 2005 at 15:29, Mike Manley wrote:
> Thanks for that - but I think I've not explained my problem properly.
>
> The problem is that the bean containing the data is NOT the one in the
> inner loop but the bean iterated through in the outer loop:
>
> <logic:iterate name="applicationForm" property="familymembers"
> id="familymmber" type="application.FamilyMember">
>
> I want to be able to access as from within the inner loop.
> familymembers[0].surname, familymembers[0].forename,
> familymembers[1].surname, etc.
>
> The reason for this is that the form needs to show and allow editing of
> different data depending on who is accessing it. Yeah, I know it makes
> things complicated but it's what THEY want. The inner iterate is around
> a form configuration bean which describes the data which should be
> displayed:
>
> <logic:iterate name="applicationForm" property="familyItems"
> id="formItem" type="utils.InputItem">
>
> InputItem has fields which describe the type of input field to be used
> and whether it is displayed, readonly, mandatory, etc.
>
> i.e. inputitem is an array with entries something like - there are other
> fields to hold any option lists for select items, etc. but those aren't
> really relevant to this problem.
> inputitem[0]
> property=surname
> readonly=false
> size=30
> type=text
> mandatory=true
>
> inputitem[1]
> property=forename
> readonly=false
> size=30
> type=text
> mandatory=true
>
> and I want to end up with html like this.
>
> <!-- First Row -->
> <input type="text" name="familymembers[0].forename" value="">
> <input type="text" name="familymembers[0].surname" value="">
> <!-- 2nd row -->
> <input type="text" name="familymembers[1].forename" value="">
> <input type="text" name="familymembers[1].surname" value="">
>
> but because the iterator count is picked up from the inner loop - I end
> up with
> <!-- First Row -->
> <input type="text" name="familymembers[0].forename" value="">
> <input type="text" name="familymembers[1].surname" value="">
> <!-- 2nd row -->
> <input type="text" name="familymembers[0].forename" value="">
> <input type="text" name="familymembers[1].surname" value="">
> <!-- 3rd row -->
> <input type="text" name="familymembers[0].forename" value="">
> <input type="text" name="familymembers[1].surname" value="">
>
>
> I've done this successfully using a similar technique when there is a
> single data item to be edited but this form needs to be able to edit
> multiple rows at once and I'm hitting a problem with the iterator.
>
> I guess what I really need is a way to iterate round the inner loop
> without the counter used for indexing being increased.
>
> Again, thanks for any help anyone can give.
>
> Mike
>
> Murray Collingwood wrote:
> > Hi Mike
> >
> > Maybe I'm simplifying it somewhat and I'm not sure of your form-bean
> > structure,
> > however the outer loop should loop through 'familymembers' as it is looping
> > it
should
> > set a form-bean for the inner loop identifying a 'familymember'. I also
> > like to add
the
> > type here - helps my inline documentation. So, outer loop should be:
> >
> > <logic:iterate name="applicationForm" property="familymembers"
id="familymember"
> > type="controller.form.FamilyMemberForm">
> >
> > Then we can add the inner loop in a similar manner, referencing the
> > 'familymember'
> > defined in the outerloop:
> >
> > <logic:iterate name="familymember" id="familyitem"
> > type="controller.form.FamilyItemForm">
> >
> > Finally we can then display the input box for these items:
> >
> > <html:text name="familyItem" property="dataProperty"
> > size="${familyItem.size}"
> > readonly="${familyItem.readonly}">
> >
> > Maybe this is too simplistic, sorry if I've missed the point somewhere.
> >
> > Kind regards
> > mc
> >
> >
> > On 28 Oct 2005 at 14:01, Mike Manley wrote:
> >
> >
> >>Hi,
> >>
> >>I have a problem trying to create a multi row edit form which has to be
> >>able to dynamically decide which columns should be displayed for edit.
> >>My jsp uses the code below.
> >>
> >> <logic:iterate name="applicationForm" property="familymembers"
> >>id="familymembers">
> >> <tr>
> >> <logic:iterate name="applicationForm" property="familyItems"
> >>id="formItem">
> >> <td>
> >> <logic:notEmpty name="formItem">
> >> <% InputItem inputItem = (InputItem)formItem; %>
> >> <logic:equal name="formItem" property="type"
> >>value="text">
> >> <html:text size="<%= inputItem.getSize() %>"
> >>readonly="<%= inputItem.isReadonly()%>" name="familymembers"
> >>property="<%= inputItem.getDataProperty() %>" indexed="true"/>
> >> </logic:equal>
> >> </td>
> >> </logic:iterate>
> >> </td>
> >> </logic:iterate>
> >>
> >>The outer iterate is the bean holding the data - in this case a list of
> >>family members - name, gender, date of birth. The inner iterate is the
> >>list of fields to be displayed for each, My problems is that when this
> >>is rendered as html - the index values generated use the index of the
> >>inner iterate not the outer one - so I get
> >>
> >><tr>
> >><td>
> >> <input type="text" name="familymembers[0].forename" value="">
> >></td>
> >><td>
> >> <input type="text" name="familymembers[1].surname" value="">
> >></td>
> >></tr>
> >><tr>
> >><td>
> >> <input type="text" name="familymembers[0].forename" value="">
> >></td>
> >><td>
> >> <input type="text" name="familymembers[1].surname" value="">
> >></td>
> >></tr>
> >>
> >>whereas what I want is
> >>
> >><tr>
> >><td>
> >> <input type="text" name="familymembers[0].forename" value="">
> >></td>
> >><td>
> >> <input type="text" name="familymembers[0].surname" value="">
> >></td>
> >></tr>
> >><tr>
> >><td>
> >> <input type="text" name="familymembers[0].forename" value="">
> >></td>
> >><td>
> >> <input type="text" name="familymembers[1].surname" value="">
> >></td>
> >></tr>
> >>
> >>I have also tried using nested:iterate as well - in which case I get
> >>
> >><tr>
> >><td>
> >> <input type="text" name="applicationForm[0].familymembers[0].forename"
> >
> > value="">
> >
> >></td>
> >><td>
> >> <input type="text" name="applicationForm[1].familymembers[0].surname"
> >
> > value="">
> >
> >></td>
> >></tr>
> >><tr>
> >><td>
> >> <input type="text" name="applicationForm[0].familymembers[1].forename"
> >
> > value="">
> >
> >></td>
> >><td>
> >> <input type="text" name="applicationForm[1].familymembers[1].surname"
> >
> > value="">
> >
> >></td>
> >></tr>
> >>
> >>so the familymembers index is now correct but I have an additionally
> >
> > applicationForm[0] that I don't need.
> >
> >>Basically what I want to achieve is that the inner loop is ignored for the
> >>purposes of
> >
> > generating the indexing for the html output - but can't figure out to
> > achieve that
without
> > writing my own tag.
> >
> >>Can anyone help?
> >>
> >>Thanks
> >>
> >>Mike Manley
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >>
> >>--
> >>No virus found in this incoming message.
> >>Checked by AVG Free Edition.
> >>Version: 7.1.362 / Virus Database: 267.12.5/150 - Release Date: 27/10/2005
> >>
> >
> >
> >
> >
> > FOCUS Computing - web design
> > Mob: 0415 24 26 24
> > [EMAIL PROTECTED]
> > http://www.focus-computing.com.au
> >
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> --
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.1.362 / Virus Database: 267.12.6/151 - Release Date: 28/10/2005
>
FOCUS Computing - web design
Mob: 0415 24 26 24
[EMAIL PROTECTED]
http://www.focus-computing.com.au
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.362 / Virus Database: 267.12.6/151 - Release Date: 28/10/2005
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]