Struts beans

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
ich habe vor kurzem angefangen mich in Struts, JSP und beans einzuarbeiten. Ja, alles auf einmal ;)

Im Prinzip funktioniert alles wunderbar nur habe ich mein gesamtes Projekt auf Struts 2.x ausgelegt. Das größte Problem ist, dass ich es einfach nicht hinbekomme mit Struts beans zu befüllen. Mit <jsp:useBean ist es kein Problem.

Ganz konkret sieht es folgendermassen aus:

1. user authentifiziert sich

2. Eine Action wird aufgerufen...Datenbankabfrage usw.

3. Ergebnis JSP anzeigen. Zu diesem Zeitpunkt kann ich mit <s:property...> auf die einzelnen Parameter der Actionklasse zugreifen. Nehmen wir an es gibt einen Parameter namens bn. Dann liefert mir <s:property value="bn"/>
den Wert der in bn steht.

Nun ist es ja wenig sinnvoll immer wieder die DB zu bemühen um Daten auszulesen die man permanent braucht. Also schrieb ich mir eine User-Bean die im Prinzip alle Userrelevanten Daten beinhalten soll.

Auf meiner Ergebnisseite (JSP) sage ich nun

Code:
<s:bean name="MeineBean" id="bean">
<s:set name="mail" scope="session"/>
</s:bean>

Er soll also die in der Actionklasse ermittelte email in die Userbean schreiben.

Leider funktioniert es so nicht. Was mache ich falsch.

Ein anderer Ansatz war JSP und useBean zu bemühen. Also

Code:
<jsp:useBean id="user" class="myMts.User" scope="session"></jsp:useBean>

<jsp:setProperty name="user" property="mail"/>

Hier habe ich das Problem, dass die in der Actionklasse ermittelten Parameter offensichtlich nicht in der ergebnis JSP zur Verfügung stehen.

Am liebsten wäre mir, wenn ich sagen könnte...

Code:
<jsp:useBean id="user" class="myMts.User" scope="session"></jsp:useBean>

<jsp:setProperty name="user" property="mail" value="gibMirVonStruts(mail)"/>

Vielleicht mache ich da auch Syntaktisch etwas falsch??

Vielen Dank im Voraus. Mein Projekt lässt sich aufgrund von Zeitmangel leider nicht auf Struts 1.x umstellen. Ich hätte dann zwar einige Probleme nicht mehr (wie Layout z.B.) aber insgesamt würde die Umstellung zu lange dauern...Vor allem aufgrund meiner wenigen Erfahrung.

Ich bin für jede Hilfe dankbar. Vielleicht macht es auch sin, die benötigten Daten für die User-Bean nochmals im JSP per SQL anzufragen und dann zu speichern. da ich die DB aber schon mit Struts bemühe und einer Action wätre es natürlich schön, wenn cih die Resultate einfach über das <jsp:useBean>-Tag aufgreifen könnte.
 

HLX

Top Contributor
Kenne Struts 2 noch nicht, aber unter Struts 1 ging das so:


Setzen der Werte erfolgt in der Action:
Code:
public ActionForward execute(ActionMapping mapping, ActionForm form,
		HttpServletRequest request, HttpServletResponse response)
		throws Exception {
    MyBean bean = (MyBean)request.getSession().getAttribute("meineBean");
    if(bean == null) {
             bean = new MyBean();

             // TODO: befülle bean mit Werten aus der Datenbank
    
    }
    request.getSession().setAttribute("meineBean", bean);
    // die Bean hängt nun an der Session und ist gefüllt
}

Auslesen des Bean-Attributes "mail" in der JSP:
Code:
    <bean:write name="meineBean" property="mail"/>
 

lokiht

Aktives Mitglied
vielen Dank für die Antwort. das werde ich mal ausprobieren und hoffen, dass es mit Struts2 funktioniert ;)
 

lokiht

Aktives Mitglied
Erstmal noch vielen Dank für die Antwort. Ich habe meinen Code dahingehend erweitert.

Code:
package login;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import logic.DBOps;
import myMts.User;

import org.apache.struts2.dispatcher.mapper.ActionMapping;

import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport {
	private String bn = null;

	private String pw = null;

	public String execute(ActionMapping mapping, HttpServletRequest request, HttpServletResponse response) throws Exception {

		if (isInvalid(getBn()))
			return INPUT;
		if (isInvalid(getPw()))
			return INPUT;

		DBOps dbops = new DBOps();
               //Login erfolgreich
		if (dbops.login(getBn(), getPw())) {
			
                     User bean = (User)request.getSession().getAttribute("User");
			
			if(bean == null) {
	             bean = new User();

	             // TODO: befülle bean mit Werten aus der Datenbank
	             
	             bean.setBn("TestUserBean");
	             bean.setPw(pw);
	   
	    }
	    request.getSession().setAttribute("User", bean); 		
			
			return SUCCESS;
		}//Login schlug fehl, Benutzer existiert nicht
                else {
			setMsg("Login fehlgeschlagen!");
			setReason("Benutzername und/oder Passwort falsch");
			return ERROR;
		}
		
		/*TODO
		 * Benutzerdaten komplett holen und setzen
		 * Wichtig zum speichern in der User Bean
		 */
		
	}

Ich bekomme schonmal keine Exception, was sehr schön ist :)

Nur kann ich die Userbean nicht auslesen, da es das bean write nicht mehr gibt. Zumindest nicht in der Struts2 Taglib oder ich habe etwas übersehen.

Dort müsste das in etwas wie folgt gehen:

JSP:

Code:
<s:bean name="User"> Willkommen <s:property value="bn"/> </s:bean>
...um beispielsweise das Attribut bn auszulesen.

Nur scheint so nicht zu gehen
 

lokiht

Aktives Mitglied
*Verzweiflung* :(

Eine bean auszulesen in einer JSP klappt nun wunderbar mit

Code:
<s:bean name="myMts.User" id="user">
  Willkommen <s:property value="bn"/>
</s:bean>

leider funktioniert es nicht, den Inhalt der bean in der Action zu setzen. Entweder wird der Inhalt nicht korrekt gesetzt oder aber obiger Code erzeugt eine neue Instanz von User womit dann der neue gesetzte bn nicht ausgegeben wird. Hat noch jemand eine Idee woran es liegen könnte. Im Prinzip soll es ja so gehen, dass sich ein User einloggt, Daten aus der DB geholt werden, die Daten werden in eine Bean geschrieben und auf den nachfolgenden Seiten nur aus dieser bean geholt.

Vielen dank im Voraus
 

SnooP

Top Contributor
Also ich kenn mich leider auch nicht mit Struts2 aus - aber kannst du nicht auch einfach die ActionForm dafür nutzen... - dann könntest du der einfach entsprechend mehr Attribute geben (inkl. getter/setter) und darauf zugreifen in der execute-Methode. Diese Bean ist dann implizit in den nachfolgenden Seiten zugreifbar (unter struts1 halt mit bean:write - bei dir irgendwie anders *g*)...
 
G

Guest

Gast
Hi,
ich hab mich bisher auch nur sehr kurz mit Struts 2 beschäftigt, aber eine der wichtigen Anderungen ist, das man im Gegensatz zu Struts 1 keine FormBeans mehr benötigt. Man kann in der jsp direkt auf die ActionBean durchgreifen. Die Action-Klasse ist jetzt keine Singleton mehr sondern wird pro Request erzeugt, wordurch sie nicht mehr ThreadSafe zu sein braucht.
Die execute() Methode benötigt auch keine Parameter mehr. Wenn man das request-Objekt benötigt, dann erstellt man einfach die folgende Methode. Man benötigt dann natürlich ein Klassen-request Objekt.
Code:
     public void setServletRequest(HttpServletRequest httpServletRequest) {
         this.request = httpServletRequest;
     }

Die Parameterübergabe läuft analog ab. Man kann direkt auf die getter-Methoden der Action-Klasse zugreifen. In deinem Fall erstellst du einfach eine getUser()-Methode in der Action-Klasse und greifst dann per
Code:
<s:property value="user" /> darauf zu. Falls der user ein feld name hat auch z.B. einfach per
<s:property value="user.name" />

Mir hat folgender Atrikel ziemlich geholfen:
http://www.infoq.com/articles/migrating-struts-2-part3
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Listenfeld mit Struts und Beans realisieren Allgemeines EE 4
S Struts 2 datetimepicker Allgemeines EE 3
W Struts Tutorial für EE Noobs? Allgemeines EE 2
N Struts vs JSF ? Allgemeines EE 7
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
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 Problem mit Struts und tiles Allgemeines EE 4
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
D Struts + Table Allgemeines EE 6
L Struts - Action auslösen bei Browser Back Allgemeines EE 2
N Struts - Problem mit <html:link> Action Allgemeines EE 3
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
B Struts Problem: Array in JSP ausgeben (logic:iterate) Allgemeines EE 12
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
M Struts File Upload problem Allgemeines EE 6
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
T JSTL + Struts (inkl.Hibernate) -> forEach Problem Allgemeines EE 6
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
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
B Struts DBCP Allgemeines EE 4

Ähnliche Java Themen

Neue Themen


Oben