Struts Problem: Array in JSP ausgeben (logic:iterate)

Status
Nicht offen für weitere Antworten.

Bigelo

Mitglied
Hallo alle miteinander!
Ich versuche gerade ein String Array in einer JSP auszugeben. Leider funktioniert das überhaupt nicht.

Ich benutze eine Klasse "TeamCreationBean" um die Strings "name" aus der Datenbank zu holen. In dieser Klasse werden die Strings (ca 56 Stk) lokal in einem Array gespeichert. Dieses Array speichere ich in noch in der Klasse "TeamCreationBean" in einem ActionForm Object namens team (vom Typ TeamCreationForm).

Nun will ich aus der ActionForm "TeamCreationForm", in der das Array nun gespeichert ist die Werte in einer JSP untereinander ausgeben.

Mein Veruch:

Code:
<logic:iterate id="team" indexId="i" name="TeamCreationForm" property="torNameArray">
		<tr><td><bean:write name="team"/></td></tr>
	 </logic:iterate>


Das funktioniert leider nicht, dort werden nur Hieroglyphen ausgegeben.


Wenn mir da jemand helfen könnte wäre das echt super!!!
Danke schonmal im vorraus




Die unten angegebenen Dateien habe ich auf das nötigste begrenzt, zur besseren Übersicht!! :)


ActionForm:


Code:
public class TeamCreationForm extends org.apache.struts.action.ActionForm {

	private String[] torNameArray = new String[100];

    
    public String[] getTorNameArray() {
		return torNameArray;
	}

	public void setTorNameArray(String[] torNameArray) {
		this.torNameArray = torNameArray;
	}



Die Action:


Code:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,    
                                      HttpServletResponse response) throws Exception {
//    	 get the session object
		HttpSession session = request.getSession();
		// get the user object
		UserDTO user = (UserDTO)session.getAttribute("user");
		
		// create a new TeamCreationBean passing the datasource
		TeamCreationBean tcb = new TeamCreationBean(getDataSource(request, "kms_db"));
		
//		 initialize a fresh TeamDTO
		TeamCreationForm team = new TeamCreationForm();
		team = tcb.getTor(user, team);
		
		session.setAttribute("team",team);
	
		return (mapping.findForward("success"));
    }




Das Bean, welches die Daten holt:

Code:
public TeamCreationForm getTor(UserDTO user, TeamCreationForm team) throws  ModuleException
	{
		String [] localTeamNameArray = new String [100];
	//	int [] localTeamIdArray = new int [100];
		int i=0;
		Connection con = null;
		Statement stmt = null;
		String sqlQuery ="";
		ResultSet rs = null;
		try{
			con = dataSource.getConnection();
			stmt = con.createStatement();
			sqlQuery = "SELECT * FROM spieler WHERE pos='TOR'";
			rs = stmt.executeQuery(sqlQuery);
			while (rs.next()){
					i++;
					localTeamNameArray[i] = rs.getString("name");
				//	localTeamIdArray[i] = rs.getInt("id");	
				}
			team.setTorNameArray(localTeamNameArray);
			//team.setTorIdArray(localTeamIdArray);
			return team;
		}
 

HLX

Top Contributor
Bigelo hat gesagt.:
Code:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,    
                                      HttpServletResponse response) throws Exception {
//    	 get the session object
		HttpSession session = request.getSession();
		// get the user object
		UserDTO user = (UserDTO)session.getAttribute("user");
		
		// create a new TeamCreationBean passing the datasource
		TeamCreationBean tcb = new TeamCreationBean(getDataSource(request, "kms_db"));
		
//		 initialize a fresh TeamDTO
		TeamCreationForm team = new TeamCreationForm();
		team = tcb.getTor(user, team);
		
		session.setAttribute("team",team);
	
		return (mapping.findForward("success"));
    }

Hier benennst du ein sitzungsweites Attribut mit "team".



Bigelo hat gesagt.:
Code:
<logic:iterate id="team" indexId="i" name="TeamCreationForm" property="torNameArray">
		<tr><td><bean:write name="team"/></td></tr>
	 </logic:iterate>

Hier könnte dein Problem sein: Bei "bean:write" wird auf das sitzungsweite Attribut zugegriffen. Benenne das Attribut in der execute-Methode mal um.
 

Bigelo

Mitglied
Hi.
Danke schonmal für die Antwort. Hat leider nichts gebracht.
Ich habe mir das iterate-Tag nochmal genauer angeschaut und habe darauf das "id" weggelassen.

Jetzt kommt die Fehlermeldung "Cannot find bean: "team" in any scope".
Habe auch schon versuch das scope-Attribut zu setzen, funktioniert aber auch nicht.Hast du da vielleicht ne Ahnung?
Dnake und Gruß
 

Bigelo

Mitglied
Tschuldigung, habe mich vertan.
Habe natürlich nicht das "id" weggelassen, sondern das "IndexId"

Sorry
 

RaoulDuke

Bekanntes Mitglied
Du willst auf eine Bean namens "TeamCreationForm" zugreifen, hast aber deine ActionForm Bean unter dem Namen "team" in der Session abgelegt.


Code:
session.setAttribute("team",team); 

<logic:iterate id="team" indexId="i" name="TeamCreationForm" property="torNameArray">
 

Bigelo

Mitglied
Wie müsste ich dass denn dann genau machen?
Es ist doch ok, dass ich die Daten aus der Datenbank in dem FormBean (ActionForm) speichere, oder.
Wie müsste das iterate tag denn aussehen?

Danke
 

RaoulDuke

Bekanntes Mitglied
Bigelo hat gesagt.:
Wie müsste ich dass denn dann genau machen?
Es ist doch ok, dass ich die Daten aus der Datenbank in dem FormBean (ActionForm) speichere, oder.
Wie müsste das iterate tag denn aussehen?

Danke

Erstmal hier die Doku zu logic:iterate: http://struts.apache.org/1.2.9/userGuide/struts-logic.html#iterate

Dann weiter:

Wenn du eine Bean unter dem Namen "team" ablegst:

Code:
session.setAttribute("team",team);

dann kommst du so da wieder ran:

Code:
<logic:iterate id="element" name="team" property="torNameArray"> 
   <tr><td><bean:write name="element"/></td></tr>
</logic:iterate>

"name=" ist der Name unter dem du die Bean, auf die du zugreifen willst, abgelegt hast. "property" ist die Property unter der in dieser Bean deine Collection/dein Array zu erreichen ist. "id" ist der Name unter dem du die Elemente deine Collection beim Iterieren erreichst.

Zum Thema ActionForm: Es macht nur Sinn deine Daten in ein ActionForm zu packen wenn du es benutzt um ein Formular vorzubelegen, das du dann an eine weitere Action übergeben willst.

Willst du nur Daten anzeigen brauchst du kein ActionForm.

Wie sieht denn der Eintrag deines Formulars in der Struts Config aus?
 

RaoulDuke

Bekanntes Mitglied
Das du im iterate id="team" genomment hast sollte prinzipiell kein Problem sein, da beim Iterate die Elemente der Collection nur im Page Scope abgelegt werden. Sollte sich also nicht weiter beissen, sieht aber schlecht aus und verwirrt.

Ich würde die Namen etwas "sprechender" machen das man auch versteht was sich da hinter verbirgt. Wenn die Bean in der Session schon ein "team" darstellt sind die Elemente darin wohl Teile von "team" und nicht selbst auch wieder "team"...
 

RaoulDuke

Bekanntes Mitglied
Und noch was:

Ich würde eine Methode wie getTor (wofür steht eigentlich Tor?) kein ActionForm zurückgeben lassen. Ein ActionForm gehört zum View, und Modell-Methoden sollten nicht direkt View-Abhängige Strukturen erzeugen.

Du benutzt doch schon den Begriff DTO, dann fehlt dir wohl noch das zugehörige DAO.

Wenn du mit dem DAO die gewollten DTOs abegrufen hast kannst du mit diesen dann ein Form füllen. Im Bereich der Action Klasse.
 

Bigelo

Mitglied
Hi RaoulDuke.
Entschuldige bitte erstmal für die späte Antwort, ist mir gestern noch was dazwischen gekommen !

Ich habe deinen Rat befolgt und habe noch ein TeamDTO erstellt, in dem ich die Daten aus der Datenbank zwischenspeicher. In der Action übergebe ich dann das Array des Objektes TeamDTO der einem Objekt der ActionForm.
Leider funktioniert es immer noch nicht.
Mein Problem ist:
Ich verstehe nicht genau was ich für "id" eingeben muss, wenn ich das iterate-tag anwende!

Wenn ich das iterate Tag auskommentiere, funktioniert alles wie geschmiert. Das angegebene Element des Feldes torArray (ActionForm) wird ausgegeben. Siehe unten...

Code:
<tr><td><bean:write name="team" property="torArray[1]" /></td></tr>

Was muss ich denn für "id" eingeben, wenn ich das iterate-tag wieder mit einbeziehe.

Meine ActionForm ist nun so aufgebaut:

Code:
private String[] torArray = new String[56];
    
	public TeamCreationForm () {
    }
	
    public void reset(ActionMapping actionMapping, HttpServletRequest request) {

    }
    
    public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest request) {
        // TODO: Write method body
        throw new UnsupportedOperationException("Method is not implemented");
    }

    public String[] getTorArray() {
		return torArray;
	}

	public void setTorArray(String[] torNameArray) {
		this.torArray = torNameArray;
	}


Meine struts-config habe ich so aufgebaut:

Code:
<form-bean name="TeamCreationForm" type="kms.forms.TeamCreationForm">
   <form-property name="torArray" type="java.lang.String[]"/>
  </form-bean>

 <action name="TeamCreationForm" path="/teamCreationAction" scope="request" 
    type="kms.actions.TeamCreationAction" validate="false">
   <forward name="success" path="/pages/teamCreation.jsp"/>
  </action>



Du hattest ja noch wegen der Methode getTor() nachgefragt. Die holt einfach eine Anzahl von String Werten (einfache Namen) aus der DB und speichert sie lokal in einem Array. Dieses lokale Array wird dann in dem neuen TeamDTO gespeichert, welches dann dem Array in der ActionForm übergeben wird. Aus diesam Array will ich die Daten nun auf der JSP ausgeben (in Listenform untereinader)

Also, vielen Dank nochmals im Vorraus ...



P.S.: Hänge nochmal die geänderte Action mit dran :)


Code:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
//    	 get the session object
		HttpSession session = request.getSession();
		// get the user object
		UserDTO user = (UserDTO)session.getAttribute("user");
		
		// create a new TeamCreationBean passing the datasource
		TeamCreationBean tcb = new TeamCreationBean(getDataSource(request, "kms_db"));
		
//		 initialize a fresh TeamDTO
		TeamDTO team = new TeamDTO();
		
		team = tcb.getTor(user, team);
		
		TeamCreationForm test = new TeamCreationForm();
		test.setTorArray(team.getTorNameArray());
		
		session.setAttribute("team",test);
	
		return (mapping.findForward("success"));
    }
 

RaoulDuke

Bekanntes Mitglied
Hast du es mal so probiert wie ich es oben beschrieben habe?

Code:
<logic:iterate id="element" name="team" property="torNameArray">
   <tr><td><bean:write name="element"/></td></tr>
</logic:iterate>

Das sollte funktionieren. logic:iterate durchläuft das Array "torNameArray" aus der Bean "team". "id" ist der Name der PageScope Variable unter dem das Element, das gerade an der Reihe ist, im logic:iterate Block zu finden ist.

Die Bedeutung der Attribute findest du auch in der Dokumentation, den Link dazu habe ich oben gepostet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
S Problem mit Struts und tiles Allgemeines EE 4
N Struts - Problem mit <html:link> Action Allgemeines EE 3
M Struts File Upload problem Allgemeines EE 6
T JSTL + Struts (inkl.Hibernate) -> forEach Problem Allgemeines EE 6
S Struts: Problem mit <bean:message> - Tag Allgemeines EE 1
S Struts 2 datetimepicker Allgemeines EE 3
W Struts Tutorial für EE Noobs? Allgemeines EE 2
N Struts vs JSF ? Allgemeines EE 7
Lex Property per html:link schreiben in struts Allgemeines EE 2
Shihan Line Breaks in <br /> umwandeln (Struts) Allgemeines EE 7
S Struts: zwei JSP's nutzen eine Action Allgemeines EE 5
G Struts: ActionMessage value in JSP anzeigen Allgemeines EE 2
S Struts und Session Allgemeines EE 2
K Struts - FormBean mit 2 Listen - Anzeigen und Speichern Allgemeines EE 2
S Probleme mit struts - ActionServlet Allgemeines EE 6
C Struts in iFrame Allgemeines EE 2
Z Struts: Formularfelder initialisieren Allgemeines EE 3
S Struts: Wert in einem iterierten Drop-Down Menü selektieren Allgemeines EE 7
T Struts 2 Allgemeines EE 6
R Struts-Action in JSP abfragen? Allgemeines EE 2
J struts: Bild als submit-button Allgemeines EE 2
J Internationalization mit Struts Allgemeines EE 2
E bei struts inhalte über mehrere seite verteilen Allgemeines EE 6
velaluka Struts- falsches Character-Encoding? Allgemeines EE 3
M URL Darstl. und Struts Allgemeines EE 2
G Struts beans Allgemeines EE 7
D Struts + Table Allgemeines EE 6
L Struts - Action auslösen bei Browser Back Allgemeines EE 2
netspy Struts, Spring oder ... ? Allgemeines EE 5
S Struts - Direktaufruf eines URL verhindern Allgemeines EE 11
1 Frage zu Struts und findForward Allgemeines EE 4
N Struts Jboss und Filter Allgemeines EE 2
S Fragen zu: Servlets, Struts & Hibernate Allgemeines EE 9
T Struts und Objekte in Comboboxen Allgemeines EE 4
J Probleme mit Struts Allgemeines EE 3
K STRUTS The server encountered an internal error Allgemeines EE 5
F struts logic:iterate Allgemeines EE 5
M STRUTS/Cannot retrieve definition for form bean null on acti Allgemeines EE 4
G struts-config.xml Allgemeines EE 3
H Ich bin sehr verwirrt - struts, jsp, jsf . ? Allgemeines EE 53
P Testen von Struts-Anwendung Allgemeines EE 7
P Struts Form Bean vs. Session Variable Allgemeines EE 6
A Tomcat undeploy unter Windows klappt nicht wegen struts.jar Allgemeines EE 2
M Struts Deployment Allgemeines EE 3
R Mehrsprachige Seite mit Struts & Co. ? Allgemeines EE 5
S mehrere Message Resources in Struts ansprechen Allgemeines EE 7
G Values aus DB in Input-Feldern anzeigen (Struts) Allgemeines EE 2
G Exception creating bean of class . (Struts) Allgemeines EE 8
B Verwendung von DynActionForm (Struts) Allgemeines EE 10
K dynamischer Zugriff auf .properties (Struts) Allgemeines EE 2
K Struts html:messages tag Allgemeines EE 2
G Validierung mittels Struts. Benötige Hilfe. Allgemeines EE 7
J Buchempfehlung: Servlets, JSP, Struts, JSTL Allgemeines EE 3
P struts "beliebige motive in der datenbank finden" Allgemeines EE 6
P Struts und Frames Allgemeines EE 13
L jfreechart und Struts / JSPs Allgemeines EE 3
P struts Hibernate MySQL Select Statement Allgemeines EE 24
P keine verbindung vom struts framework zu mysql Allgemeines EE 2
R Vernünftige Session-Verwaltung mit Struts Allgemeines EE 4
P Struts Anwendung- FormBean Tabelle mit input type=text Allgemeines EE 2
G Probleme mit Validierung (Struts, validation.xml) Allgemeines EE 4
M Struts - ActionForward Allgemeines EE 9
clemson gesplittete struts-config mittels ant zusammenbauen Allgemeines EE 2
J Struts Textfeld Allgemeines EE 10
M Struts shale Allgemeines EE 7
M Struts - jsp site - werte formatieren Allgemeines EE 6
clemson mehrere Mail Attachments - JSP Struts Allgemeines EE 7
R Struts FormBean Allgemeines EE 4
S Struts 1.1 download einer Datei Allgemeines EE 4
R Use bean in scriptlet in struts Allgemeines EE 4
S reagieren auf select events in jsp-struts seiten Allgemeines EE 5
P Struts - Text formatieren Allgemeines EE 6
C Grafische Komponenten unter Struts jsp (Liste) Allgemeines EE 4
P Struts - Abarbeitung Allgemeines EE 3
P J2EE Struts - Database connection failed - Hilfe?:( Allgemeines EE 6
P J2EE Struts Allgemeines EE 2
R struts 1.0.2 Checkbox-Property bleibt immer false Allgemeines EE 3
TRunKX Werteübergabe von einer *.jsp in eine *.java ohne struts Allgemeines EE 4
clemson [Struts] Validierung server-seitig bringt StackOverflowError Allgemeines EE 5
clemson [Struts] HTML-Checkbox Tag ID Allgemeines EE 2
clemson [Struts] Einer Action Parameter übergeben Allgemeines EE 2
clemson [Struts] Innerhalb Action auf form zugreifen Allgemeines EE 4
G In einer JSP auf Struts-Elemente "reagieren" Allgemeines EE 4
clemson [Struts] struts-config.xml parsen Allgemeines EE 2
clemson [Struts] Parameter an ActionForward anhängen Allgemeines EE 3
clemson [Struts] TilesRequestProcessor - processRoles Allgemeines EE 14
F Struts Allgemeines EE 9
G Struts-Write Anweisungen in Hyperlink einbauen Allgemeines EE 3
G Struts-Form: in validate- oder reset-Methode umleiten. Allgemeines EE 3
G Listenfeld mit Struts und Beans realisieren Allgemeines EE 4
L Anfänger: suche Tutorials zu Struts/EJB Allgemeines EE 6
G Struts - dynamisches FormBean Allgemeines EE 3
R struts und Mapped Properties Allgemeines EE 2
A Javadocs zu struts Allgemeines EE 5
A Kolloquium J2EE / Struts Allgemeines EE 16
A Expression Language in Struts? Allgemeines EE 6
A Form Validierung mit Struts? Allgemeines EE 2
A struts: html:form-tag das Attribut "name" ersetzen Allgemeines EE 7
B struts - beginnerproblem Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben