Re: Struts tag <logic:iterate>

From: Martin (mbierwirth_at_gmx.de)
Date: 05/19/04


Date: 19 May 2004 02:33:10 -0700

bom-ba@mail.ru (Jack_A) wrote in message news:<306b3106.0405180517.201084e9@posting.google.com>...
> Hello!
> I have a problem with struts tag <logic:iterate>
>
> There is a bean TestBean.java contains array of some class (e.g. B)
> and class B also contains array of some class (e.g. C)
>
> public class B{
> private C[] arrayC;
> public B(int n){
> arrayC = new C[n];
> int j;
> for(j = 0;j<n; j++){
> arrayC[j] = new C();
> }
> }
> public C[] getArrayC() { return arrayC;}
> public C getArrayC(int index) { return arrayC[index];}
> }
>
> public class TestBean {
> private B[] arrayB;
> public TestBean(int n){
> arrayB = new B[n];
> int j;
> for(j = 0;j<n; j++){
> arrayB[j] = new B(n);
> }
> }
> public B[] getArrayB() { return arrayB;}
> public B getArrayB(int index) { return arrayB[index];}
> }
>
> There is some code of jsp page:
>
> <%TestBean testBean = new TestBean(5);
> session.setAttribute("testBean", testBean);
> %>
> <table>
> <logic:iterate id="test" name="testBean" property="arrayB"
> indexId="i"
> scope="session">
> <tr>
> <td align="right"><html:text name='test'
> property="array"/>
> <logic:iterate id="test2" name="test"
> property="arrayC" indexId="j">
> <td align="right"><html:text name='test2'
> property="fielsOfClassC"/>
> </logic:iterate>
> <tr />
> </logic:iterate>
> </table>
>
> I try to iterate each element of arrayC, which is element of arrayB
> (which I try to iterate too) :-).
> But "[ServletException in:/testApp/test.jsp] Cannot create iterator
> for this collection'"
>
> Sorry if I wasn't very clear.
>
> Can anyone give me some advice?

I quickly simulated your example, and I didn't get this "cannot create
iterator..."-message. First, I received other errors: I had to import
the B- and C-class, then I got "no getter method...". So I specified
the property-type to iterate over:

<logic:iterate id="test" name="testBean" property="arrayB"
scope="request" type="B">
  <tr>
    <td>Row...</td>
    <logic:iterate id="test2" name="test" property="arrayC" type="C">
      <td align="right"><bean:write name="test2"
property="ceProperty"/>
    </logic:iterate>
  <tr />
</logic:iterate>

That's it. I had a simple String-variable "hello" with a getter-method
in C, and voila: a 5x5-matrix filled with hellos.

Try this. If it doesn't work, then post some more details (code of
class C, J2EE-environment, etc).

Good luck!
Martin



Relevant Pages

  • Re: Inhertance Question
    ... > public class DerivedTypeA: BaseType { ... > public int Length { ... > I need to iterate through each item setting various values. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Another C# marshaling question
    ... You will also have to change your function declaration to: ... public static extern int FF_Function( ... Then, what you have to do on return is marshal the array, like so: ... > public class FF_AO_OrderList ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Java/C++ question
    ... >>the extensions. ... >>I have an array holding an instance of A, B, C. ... As I iterate across the ... public class B implements Foo ...
    (comp.lang.java.programmer)
  • why cant I pass a squiggly brace expression into a method call?
    ... could pass an array defined as a series of values, ... array directly into <printArray> the compiler takes a look at the left ... public class Hmm1 ... int uvw; ...
    (comp.lang.java.programmer)
  • Optimization problem
    ... should I store data in my program. ... public class Point { ... bulk operation on points take this array as an argument. ... objects have huge memory overhead). ...
    (comp.lang.java.programmer)