# logic:iterate über ArrayList, die ArrayLists beinhaltet



## samtpfotegt3 (18. Dezember 2007)

Liebe Experten,

verzweifle schon seit einigen Tagen an folgendem Problem: Ich lege String-Werte über eine Bean in einer ArrayList ab (sozusagen die Spaltenwerte), die dann wiederum in einer weiteren ArrayList addiert werden, deren Bean ArrayList-en aufnimmt (Reihenwerte).

Bei dem Versuch die Werte in einer JSP via logic:iterate auszugeben, bekomme ich die Meldung, dass es keine getter-Method für die "äußere" Bean gibt.

Was kann ich tun bzw. was mache ich falsch?  

Ich würde mich riesig über (schnelle) Hilfe freuen

Viele Grüße
André


----------



## _jsd_ (18. Dezember 2007)

Hi,

vieleicht könntest Du mal bissl Quellen posten...

zu den Getter und Setter:

Soweit ich mich erinnere muß für jede Eigenschaft der Bean eine Setter- und Gettermethode existieren, da Du aber keinen Code gepostet hast kann ich Dir aus dem kalten auch nicht mehr zu Deinem Fehler sagen....

hmf


----------



## samtpfotegt3 (18. Dezember 2007)

Hi hmf, 

mache ich gerne:

Bean der inneren ArrayList:


```
package app;

public class surveyBodyRowBean {
	private String dayProp; // Property of a Day
	
	public void setDayProp(String dayProp) {
		this.dayProp = dayProp;
	}
	public String getDayProp() {
		return dayProp;
	}
}
```

Bean der äußeren ArrayList:


```
package app;
import java.util.ArrayList;

public class surveyBodyOuterRowBean {
	private ArrayList dayPropRow; // je eine Datenreihe pro User 
	
	public void setDayPropRow(ArrayList dayPropRow) {
		this.dayPropRow = dayPropRow;
	}
	public ArrayList getDayPropRow() {
		return dayPropRow;
	}
}
```

Codeschnipsel aus Actionklasse (testweise Einfügen eines Strings):


```
ArrayList al = new ArrayList();
ArrayList outeral = new ArrayList();
[...]

al = new ArrayList();
surveyBodyRowBean sbrb = new surveyBodyRowBean();
sbrb.setDayProp("H");
al.add(sbrb);
				
surveyBodyOuterRowBean sborb = new surveyBodyOuterRowBean();
sborb.setDayPropRow(al);
outeral.add(sborb);
```

und zuletzt die Schnipsel aus der JSP:


```
<logic:iterate id="Outer" name="surveyBody" property="dayPropRow">
	<logic:iterate id="Inner" name="Column">
		<bean:write name="Column"/></td>
	</logic:iterate>
</logic:iterate>
```

Hier meckert der Tomcat zur Laufzeit an der property herum. Lese ich hingegen per bean:write "dayPropRow" aus, so geht es, wenn auch nicht wie gewünscht. Ausgegeben werden Werte ähnlich wie "app.surveyBodyOuterRowBean@1afb00".

Jemand eine Idee?


----------



## _jsd_ (18. Dezember 2007)

hi,

versuche mal

```
<logic:iterate id="Inner" name="Outer" property="dayProp">
<bean:write name="Inner"/>
```
soweit ich weiß mußt Du bei logic:iterate den Namen des Getter/Setter angeben....

@see http://struts.apache.org/1.x/struts-taglib/tlddoc/logic/iterate.html

hmf


----------



## samtpfotegt3 (19. Dezember 2007)

hmf, Danke für Deine Bemühung, aber leider klappt es nicht:

No getter method for property: "dayProp" of bean: "Outer"

Meine JSP sieht an der Stelle nun wie folgt aus:


```
<logic:iterate id="Outer" name="surveyBody">
	<logic:iterate id="Inner" name="Outer" property="dayProp">
		<bean:write name="Inner"/></td>
	</logic:iterate>
</logic:iterate>
```

Wenn ich die property in der Outer-Bean drin lasse (wie im ersten Code-Posting), dann meckert Tomcat schon dort.

Ich habe den Eindruck, dass die JSP irgendwie nicht an die Werte der ArrayList heran kommt, daher auch die o. g. merkwürdigen Werte (ähnlich "app.surveyBodyOuterRowBean@1afb00") bei bean:write. Sieht eher nach einer Referenz (auf von Tomcat genutzten Speicherbereich) aus.

Aber was geht hier schief? In einem anderen Forum schrieb jemand, dass das wohl möglich sei:

http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=58&t=010365

und

http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=58&t=009760


----------



## samtpfotegt3 (19. Dezember 2007)

So, aus Verzweiflung hatte ich es auch mit String[][] versucht, aber ebenso erfolglos. Danach noch analog dem Beispiel hier http://www.jguru.com/faq/printablefaq.jsp?topic=Struts, ging aber auch nicht.

Was kann ich noch tun?


----------



## Andron (19. Dezember 2007)

Da du bereits in JSP bist, kannst ja zum Testen mit Scriplets arbeiten.
Ganz normale Java-Ausdrücke verwenden.

<%

for(äußere Schleife)
{
   for(innere Schleife)
   {

   }
}

%>


----------



## samtpfotegt3 (20. Dezember 2007)

Danke Andron für den Tipp!! 

Leider bekomme ich hier in der JSP eine Servlet Exception:


```
ArrayList surveyData = (ArrayList) request.getAttribute("surveyBody");
```

Habe langsam den Eindruck, dass man eine ArrayList od ArrayLists nicht in der session oder request speichern kann!? Ich bekomme langsam die Krise!!


----------



## samtpfotegt3 (20. Dezember 2007)

Stop, Aussage zurück  Es gibt keine Exception (die wurde durch eine andere Zeile verursacht)! Aber wie komme ich an die (inneren) Daten der String-ArrayList ran?

Mit


```
String dayProp = ((ArrayList)surveyData.get(sbRow)).get(sbCol);
```

bekomme ich je einen Servlet Error (cannot be resolved) für surveyBodyOuterRowBean und surveyBodyRowBean (die ich inzwischen in sbRow und sbCol umbenannt hatte). Das gleiche für ArrayList statt String (bei der Typdeklaration dayProp).  Schnüff


----------



## samtpfotegt3 (20. Dezember 2007)

Mit

```
System.out.print((ArrayList) (surveyData.get(0)).get(0));
```

bekomme ich

"The method get(int) is undefined for the type Object"

Warum "Object"? Habe es doch als ArrayList eingelesen...


----------



## Andron (20. Dezember 2007)

request.getAttribute() liefert Objekte zurück.
Versuch mal so:

```
ArrayList surveyData = (ArrayList) request.getAttribute("surveyBody");
System.out.println(surveyData .size());

ArrayList data1 = (ArrayList)surveyData.get(0);
System.out.println(data1.size());
System.out.println(data1.get(0).getDayProp());
```


----------



## samtpfotegt3 (20. Dezember 2007)

Andron, Zeile 1 und 2 laufen - in Zeile 4 (erster Zugriff per "get") gibt es eine 

"ServletException in '/tiles/surveyBodyRight.jsp': app.sbRow",

wobei "sbRow" weiter oben noch "surveyBodyOuterRowBean" war. Ist diese Bean falsch programmiert?


----------



## Andron (20. Dezember 2007)

Was wird in Zeile 2 ausgegeben?
Kannst du vielleicht die Fehlermeldung komplett posten?
Wie baust du dir die ArrayLists zusammen?


----------



## samtpfotegt3 (20. Dezember 2007)

Ich fülle die innere ArrayList testweise wie folgt:

```
ArrayList inneral = new ArrayList();
				
sbCol col = new sbCol();
col.setCol("H");
inneral.add(col);
col = new sbCol();
col.setCol("e");
inneral.add(col);
col = new sbCol();
col.setCol("y");
inneral.add(col);
```

Die äußere:

```
ArrayList outeral = new ArrayList();

sbRow row = new sbRow();
row.setRow(inneral);
outeral.add(row);
```

Dann:

```
req.setAttribute("surveyBody", outeral);
```

Die Zeilen

```
ArrayList surveyData = (ArrayList) request.getAttribute("surveyBody");
out.println(surveyData.size());
```

geben

1

als Ergebnis in der JSP aus.

Catalina.log sagt in Deiner Zeile 4:

```
20.12.2007 17:40:47 org.apache.struts.taglib.tiles.InsertTag$InsertHandler doEndTag
SCHWERWIEGEND: ServletException in '/tiles/surveyBodyRight.jsp': app.sbRow
org.apache.jasper.JasperException: Exception in JSP: /tiles/surveyBodyRight.jsp:45

42: 
43: ArrayList surveyData = (ArrayList) request.getAttribute("surveyBody");
44: out.println(surveyData.size());
45: ArrayList data1 = (ArrayList)surveyData.get(0);
46: %>
47: 
48: </table>


Stacktrace:
	at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
	at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:602)
	at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:99)
	at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:135)
	at org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:760)
	at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:892)
	at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
	at org.apache.jsp.pages.surveyLayout_jsp._jspx_meth_tiles_insert_1(surveyLayout_jsp.java:144)
	at org.apache.jsp.pages.surveyLayout_jsp._jspService(surveyLayout_jsp.java:79)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
	at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239)
	at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
```

Die Beans sehen wie folgt aus:

```
package app;

public class sbCol {
	private String col; // Property of a Day
	
	public void setCol(String col) {
		this.col = col;
	}
	public String getCol() {
		return col;
	}
}
```

und

```
package app;
import java.util.ArrayList;

public class sbRow {
	private ArrayList row; // je eine Datenreihe pro User 
	
	public void setRow(ArrayList row) {
		this.row = row;
	}
	public ArrayList getRow() {
		return row;
	}
}
```


----------



## Andron (20. Dezember 2007)

Ok, dann schauen wir mal, was da passiert:
Mit 

```
ArrayList surveyData = (ArrayList) request.getAttribute("surveyBody");
```
holst du dir die äußere Liste.

Dann holst du dir das erste Element aus der Liste und das ist bei dir vom Typ sbRow nehme ich mal an.

```
sbRow sb_row = (sbRow) surveyData.get(0);
```
Als Anmerkung: die Klassennamen sollten mit einer Großbuchstabe beginnen.

Jetzt holst du mit der Getter-Methode die zweite Liste:

```
(ArrayList) innereListe = (ArrayList)sb_row.getRow();
```

Und jetzt eine Testausgabe:

```
System.out.println(innereListe.size());
```

Hoffe, habe deinen Code richtig verstanden.


----------



## samtpfotegt3 (20. Dezember 2007)

Grummel 

Bereits Zeile 2:

```
sbRow sb_row = (sbRow) surveyData.get(0);
```

throws

```
20.12.2007 20:01:05 org.apache.struts.taglib.tiles.InsertTag$InsertHandler doEndTag
SCHWERWIEGEND: ServletException in '/tiles/surveyBodyRight.jsp': Unable to compile class for JSP

An error occurred at line: 37 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
sbRow cannot be resolved to a type

An error occurred at line: 37 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
sbRow cannot be resolved to a type


org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 37 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
sbRow cannot be resolved to a type

An error occurred at line: 37 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
sbRow cannot be resolved to a type


	at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
	at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:602)
	at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:99)
	at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:135)
	at org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:760)
	at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:892)
	at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
	at org.apache.jsp.pages.surveyLayout_jsp._jspx_meth_tiles_insert_1(surveyLayout_jsp.java:144)
	at org.apache.jsp.pages.surveyLayout_jsp._jspService(surveyLayout_jsp.java:79)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
	at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239)
	at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
```

Das mit dem Großbuchstaben ist ein Best Practice oder kann das wirklich Fehler verursachen?


----------



## samtpfotegt3 (20. Dezember 2007)

Könnte es gar etwas mit dem Tiles-Framework zu tun haben, das ich verwende   

```
20.12.2007 20:01:05 org.apache.struts.taglib.tiles.InsertTag$InsertHandler doEndTag
```


----------



## Andron (20. Dezember 2007)

Vielleicht musst du die Klasse in deine JSP erst importieren:

<% import="app.sbRow" scope="session"%>


----------



## samtpfotegt3 (20. Dezember 2007)

Danke, hat schon etwas weitergeholfen, aber:

```
20.12.2007 20:48:46 org.apache.struts.taglib.tiles.InsertTag$InsertHandler doEndTag
SCHWERWIEGEND: ServletException in '/tiles/surveyBodyRight.jsp': Unable to compile class for JSP

An error occurred at line: 38 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
Syntax error, insert ";" to complete Statement

An error occurred at line: 38 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
Syntax error, insert "AssignmentOperator ArrayInitializer" to complete ArrayInitializerAssignement


org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 38 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
Syntax error, insert ";" to complete Statement

An error occurred at line: 38 in the jsp file: /tiles/surveyBodyRight.jsp
Generated servlet error:
Syntax error, insert "AssignmentOperator ArrayInitializer" to complete ArrayInitializerAssignement


    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
    at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:602)
    at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:99)
    at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:135)
    at org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:760)
    at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:892)
    at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
    at org.apache.jsp.pages.surveyLayout_jsp._jspx_meth_tiles_insert_1(surveyLayout_jsp.java:144)
    at org.apache.jsp.pages.surveyLayout_jsp._jspService(surveyLayout_jsp.java:79)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
    at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
    at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239)
    at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Unknown Source)
```
Komisch, denn ein ";" fehlt da nicht...

```
ArrayList surveyData = (ArrayList) request.getAttribute("surveyBody");
sbRow sb_row = (sbRow) surveyData.get(0);
(ArrayList) innereListe = (ArrayList) sb_row.getRow();
System.out.println(innereListe.size());
```


----------



## Andron (20. Dezember 2007)

Versuch mal so:

```
ArrayList surveyData = (ArrayList) request.getAttribute("surveyBody");
sbRow sb_row = (sbRow) surveyData.get(0);
ArrayList innereListe = (ArrayList) sb_row.getRow();
System.out.println(innereListe.size());
```


----------



## samtpfotegt3 (20. Dezember 2007)

Jo, geht  Hätt' ich auch selber drauf kommen können - hab' aber erstmal Fussi geschaut 

Gibt eine

3

aus...


----------



## Andron (20. Dezember 2007)

```
sbCol col = (sbCol) innereListe.get(0);
System.out.println(col.getCol());
```

Vorher sbCol in die JSP importieren.


----------



## samtpfotegt3 (20. Dezember 2007)

Suuuuuuuuuuuuuuuuper! Klappt!!    Vielen herzlichen Dank erst einmal für Deine tolle Hilfe - da wäre ich insgesamt nicht drauf gekommen!

Jetzt möchte/muss ich den Kram noch so hingekommen, dass es mit logic:iterate und funktioniert. Reicht da vielleicht schon ein import meiner Beans aus?


----------



## Andron (20. Dezember 2007)

Ich denke, das sollte reichen.


----------



## samtpfotegt3 (20. Dezember 2007)

Hmm, habe folgende Imports:

```
<%@ page import="app.sbRow"%>
<%@ page import="app.sbCol"%>
```

und folgende Schleife:

```
<logic:iterate name="surveyBody" id="Row" property="row">
	<logic:iterate name="Row" id="Col">
		<td align="right"><font size="1"/>
		<bean:write name="col"/></td>
	</logic:iterate>
</logic:iterate>
```

Catalina:

```
20.12.2007 23:32:39 org.apache.struts.taglib.tiles.InsertTag$InsertHandler doEndTag
SCHWERWIEGEND: ServletException in '/tiles/surveyBodyRight.jsp': No getter method for property: "row" of bean: "surveyBody"
org.apache.jasper.JasperException: Exception in JSP: /tiles/surveyBodyRight.jsp:39

36: 		<bean:write name="Row" property="dOM"/></td>
37: </logic:iterate>
38: <tr>
39: <logic:iterate name="surveyBody" id="Row" property="row">
40: 	<logic:iterate name="Row" id="Col">
41: 		<td align="right"><font size="1"/>
42: 		<bean:write name="col"/></td>


Stacktrace:
```


----------



## Andron (21. Dezember 2007)

Versuch mal so:

```
<logic:iterate name="surveyBody" id="Body">
   <bean:define name="Body" id="Row" property="row" />	
   <logic:iterate name="Row" id="Col">
       <bean:write name="Col" property="col"/></td>
   </logic:iterate>
</logic:iterate>
```

In Struts bin ich auch noch nicht so fit.


----------



## samtpfotegt3 (21. Dezember 2007)

Pff, von wegen "nicht fit" in Struts...

Es hat geklaaaaaaaaaaaaaaaaaaaaapt 1000x  Damit hast Du mir ein ganz tolles und wichtiges Vor-Weihnachtsgeschenk (für meine Diplomarbeit) gemacht. Ich hoffe, ich kann mich eines Tages revanchieren und Dir Deine dafür aufgebrachte Zeit zurückschenken 

Aber zur Lösung: wenn man versiert ist, hätte man das vorher sehen müssen, dass man die Beans importieren und innerhalb der Schleife noch einmal eine Bean definieren muss? Bzw. gerade habe ich noch einmal ohne Import der Beans getestet und es geht noch immer...


----------



## Andron (21. Dezember 2007)

Ich arbeite mit JSP-Scriplets und da muss man die Beans importieren.
Wenn es mit Struts auch ohne import geht, dann wusste ich das nicht.
Danke für den Tipp .

Schön, dass ich helfen konnte.


----------



## samtpfotegt3 (23. Dezember 2007)

Mist ;-( Habe mich leider etwas zu früh gefreut.

Nachdem ich die ArrayLists mit sinnvollen Daten gefüllt habe stelle ich nun fest, dass mir Deine Lösung in Abhängigkeit von der äußeren Schleife (Row) die Spalten (Col) multipliziert. D. h. die Spalten werden z. B. beim Wert 3 für die Rows in dreifacher Anzahl hintereinander ausgegeben und dann auch noch 3 mal das selbe untereinander in den Rows. Ich bekomme also ein und dieselbe Ergebnismenge 3x3 ausgegeben.

Könnte das an der innerhalb der äußeren Schleife definierten Page-Bean liegen? Ich habe schon versucht diese nach "ganz draußen" zu verlagern, dann erhalte ich jedoch wieder die alten Probleme. :-(

Meine Erfahrungen sind bislang, dass man an die Rows nur herankommt, wenn man zunächst per logic:iterate die Schleife "anfängt". Tut man dies nicht, so bekommt man wieder die alten Fehlermeldungen präsentiert. Hättest Du evtl. noch 'ne Idee so kurz vorm Christkind? ;-)


----------



## samtpfotegt3 (26. Dezember 2007)

Update: Andron, DEIN Code war _natürlich_ korrekt - ich war nur zu doof, die Beans mit den richtigen Daten zu füllen (zumind. ist es im Moment das, was ich vermute ;-)). Also mach' Dir erstmal weiter keine Gedanken


----------

