I have to admit I always have trouble dealing with the iterate tag.  I
recently rediscovered how easy it is to do these iterations using the
nested tags.  Have you tried them?  Maybe something like this would
work for you:

<html:form action="/test">
       <nested:iterate property="list">
               <nested:write property="id" /><br>
               <nested:text property="description"
onchange="changefield(this);"/><br>
               <nested:hidden property="isChanged" /><br>
       </nested:iterate>
       <html:submit>Send</html:submit>
</html:form>

I don't know if it's considered "best practice" to also surround the
form with <nested:form>, but I've tried using the basic <html:form>
and it works fine, too.  The result is code I can actually understand.
:)

If you want to stick to the html tags, take a look at the example in
http://wiki.apache.org/struts/StrutsCatalogLazyList

hth,
Hubert

On Sun, 3 Oct 2004 14:16:19 -0400, Victor Grazi <[EMAIL PROTECTED]> wrote:
> We are trying to use <logic:iterate> in a JSP to access items in a list
> stored in the Form Bean by the Action class but we can't seem to get the
> syntax right.
> 
> I am getting an error meessage from PropertyUtils that displays the index as
> '${index}', which indicates that that struts el expression is not resolving
> to an int.
> 
> Here is my exact syntax. The form and action are described in more detail
> below.
> 
> <html:form action="/test">
>        <logic:iterate id="lineItem" indexId="index" name="testForm"
> property="list">
> 
>                <!-- display the index counter for the fun of it. This works
> ok -->
>                <bean:write name="index" /><br>
> 
>                <!-- now access the id of the indexth element of the list
> -->
>                <bean:write name="list[${index}].id" /><br>
> 
>                <!-- now access the description of the indexth element of
> the list -->
>                <html:text property="list[${index}].description"
> onchange="changefield(this);"/><br>
>                <html:hidden property="isChanged[${index}]" /><br>
> 
>        </logic:iterate>
>        <html:submit>Send</html:submit>
> </html:form>
> 
> I have created several Test classes to help me understand the flow...
> 
> The form is an instance of TestForm exends ActionForm and its form name in
> struts-config.xml is "testForm". (This is the named form for the action.)
> TestForm has one property: java.util.List list with accessors public List
> getList() and public void setList(List list).
> 
> List is always a List of LineItem objects where LineItem is a simple
> JavaBean with properties
> String id (public String getId() and public void setId(String id)), String
> description (public String getDescription() and public void
> setDescription(String description)) and boolean isChanged (public void
> setIsChanged(boolean value) and public boolean getIsChanged() )
> 
> The Action (TestAction extends Action) "execute" method creates a List of 5
> LineItem objects and stores that List into the form by calling
> ((TestForm)form).setList(list), then forwards to the jsp (test.jsp)
> 
> In the jsp I would like to iterate through the list to perform the
> following:
> display the id (as html read-only text) and the
> description (as html:text) of each line item,
> then use JavaScript to change the "isChanged" property (in a hidden field)
> when the onchange event is triggered.
> 
> I have tried several different syntaxes. I also tried using arrays instead
> of List's. I also specified the type of the LineItem class explicitly in the
> form element. I tried each of the "html:" and "bean:write" lines above one
> at a time to see if any would be successful, but they all produce that same
> error. I have combed the web for a good example of how to accomplish this,
> but I couldn't find anything that handled things in a way that would work
> for us.
> 
> Can you tell me what I am doing wrong and how to accomplish the access?
> 
> Thanks/Victor
>

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

Reply via email to