logic:iterate über ArrayList, die ArrayLists beinhaltet

samtpfotegt3

Grünschnabel
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? :confused: :(

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

Viele Grüße
André
 
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
 
Hi hmf,

mache ich gerne:

Bean der inneren ArrayList:

Code:
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:

Code:
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):

Code:
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:

Code:
<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? :confused:
 
Zuletzt bearbeitet:
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:

Code:
<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
 
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)
{

}
}

%>
 
Danke Andron für den Tipp!! :)

Leider bekomme ich hier in der JSP eine Servlet Exception:

Code:
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!! :( :( :(
 
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

Code:
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). :confused: Schnüff :( :(
 
Mit
Code:
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... :confused: :confused: :confused:
 

Neue Beiträge

Zurück