Zum Inhalt springen

2 Fragen zu Struts


themaster

Empfohlene Beiträge

Hallo,

ich entwickele gerade eine JSP-Anwendung mit Struts, dabei habe ich ein paar Fragen/Probleme:

1) Darf ich eigentlich in die Action-spezifischen Forwards verweise auf Actions angeben (z.B. /bla.do) oder darf dort nur auf jsp-Seiten verweisen werden.

Easystruts (ein Strutsplugin für Eclipse) meckert immer wenn in dem Forward keine jsp-Datei steht. Warum soll man dies so machen?

2)Etwas gemeiner.

Teil der Anwendung ist eine Benutzerverwaltung. Mit zwei JSPs mit (fast) gleichen Actionformularen newuser.jsp und edituser.jsp.

Bei newuser klappt alles wunderbar. Aber was ist der (beste) Weg die Daten des Benutzers der editiert werden soll in das Formular von edituser.jsp zu bekommen?

Wenn ich edituser.jsp aufrufe ist das formular leer wie bei newuser.jsp. Was ist die Pest Practice dafür?

Danke,

themaster

Link zu diesem Kommentar
Auf anderen Seiten teilen

zu 1)

Natürlich kannst du in deine Action-Forwards auch auf Actions verweisen - einfach den entsprechenden Pfad (z.B. path="/myPath/myAction.do).

Du solltest aber das Servlet-Mapping möglichst nicht /*.do nennen sondern /do/*. Bei *.do könntest du evtl. beim File-Download Probleme kriegen...

zu 2)

Du hast ja sicherlich eine Auflistung aller User und (wahrscheinlich) dahinter einen Link "edit". Diesem Link verpasst du als Parameter die eindeutige User-ID und leitest an eine Action "LoadUserAction" weiter. Diese lädt genau diesen einen User über seine ID und leitet an die entsprechende EditUser.jsp weiter - die User-Bean (bzw. Form) natürlich gesetzt....

Gruß

Snowghost

Link zu diesem Kommentar
Auf anderen Seiten teilen

1) Darf ich eigentlich in die Action-spezifischen Forwards verweise auf Actions angeben (z.B. /bla.do) oder darf dort nur auf jsp-Seiten verweisen werden.

Easystruts (ein Strutsplugin für Eclipse) meckert immer wenn in dem Forward keine jsp-Datei steht. Warum soll man dies so machen?

Damit betreibst Du "Action-Chaining", d.h. eine Action A ruft Action B auf, die dann evtl. noch Action C um dann schlussendlich wieder auf einer JSP-Seite zu landen.

Das ist ein Mechanismus der von Struts zwar nicht unmöglich gemacht wird, aber nicht in die Architektur passt und daher fast immer zwangsläufig zu Problemen führen wird (z.B. gehen die Request-Parameter beim "Weiterleiten" verloren).

Falls Action B auch Teile der Logik von Action A als Voraussetzung braucht, ist das eine gute Gelegenheit diese Methoden in eine Service-Klasse auszulagern (sollte man sowieso machen, die Actions sind bestenfalls als "rein-->Entscheidung-->raus" - Methoden zu verstehen), um sie dann von den Actions aus aufzurufen ("Code duplication is the root of all evil.." oder wie war das).

2)Etwas gemeiner.

Teil der Anwendung ist eine Benutzerverwaltung. Mit zwei JSPs mit (fast) gleichen Actionformularen newuser.jsp und edituser.jsp.

Bei newuser klappt alles wunderbar. Aber was ist der (beste) Weg die Daten des Benutzers der editiert werden soll in das Formular von edituser.jsp zu bekommen?

Wenn ich edituser.jsp aufrufe ist das formular leer wie bei newuser.jsp. Was ist die Pest Practice dafür?

Baue eine "PrepareEditUserAction" und z.B. verlinken und als Request-Parameter die User-ID übergeben, in dieser wird das in der struts-config.xml definierte ActionForm mit den vorhandenen Daten gefüllt und beim Weiterleiten zur JSP stehen alle benötigten Daten schon im Formular drin, können bearbeitet und in einer "UpdateEditUserAction" wieder vom Formular zurück in die Datenbank geschrieben werden (falls Du Struts 1.1 benutzt kannst Du aus den 2 Action-Klassen hier schön eine XXXDispatchAction basteln).

Grüsse,

Jan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von jan76

Damit betreibst Du "Action-Chaining", d.h. eine Action A ruft Action B auf, die dann evtl. noch Action C um dann schlussendlich wieder auf einer JSP-Seite zu landen.

Das ist ein Mechanismus der von Struts zwar nicht unmöglich gemacht wird, aber nicht in die Architektur passt und daher fast immer zwangsläufig zu Problemen führen wird (z.B. gehen die Request-Parameter beim "Weiterleiten" verloren).

Falls Action B auch Teile der Logik von Action A als Voraussetzung braucht, ist das eine gute Gelegenheit diese Methoden in eine Service-Klasse auszulagern (sollte man sowieso machen, die Actions sind bestenfalls als "rein-->Entscheidung-->raus" - Methoden zu verstehen), um sie dann von den Actions aus aufzurufen ("Code duplication is the root of all evil.." oder wie war das).

Es ist nicht so, dass die zweite Action Logik von der ersten benötigt. Das dies faul ist, leuchtet ein.

Meine jsp-Seite benötigt Daten aus einer Action damit sie richtig angezeigt werden kann. (Damit ist die Action weniger eine Action mehr ein Datenlieferant)

Wahrscheinlich auch nicht im Sinne der Architektur, aber

es läuft (auch eine schlechte Entschuldigung für blödes Design...):confused:

Baue eine "PrepareEditUserAction" und z.B. verlinken und als Request-Parameter die User-ID übergeben, in dieser wird das in der struts-config.xml definierte ActionForm mit den vorhandenen Daten gefüllt und beim Weiterleiten zur JSP stehen alle benötigten Daten schon im Formular drin, können bearbeitet und in einer "UpdateEditUserAction" wieder vom Formular zurück in die Datenbank geschrieben werden (falls Du Struts 1.1 benutzt kannst Du aus den 2 Action-Klassen hier schön eine XXXDispatchAction basteln).

Damit hatte ich heute größere Probleme.

Ich habe diese Prepare-Action gemacht auch mit der Userid als Parameter und ein UserForm erzeugt und mit Daten gefüllt und in den Request gestellt.

Danach habe ich auf die jsp-Seite weitergeleitet, aber das Userform war in dem Moment leer.

Ich weiß nicht wirklich wieso.

Werden beim Forward aus der Action heraus, alle Daten im Request-Context gelöscht?

(Struts 1.1 benutze ich nicht, diese Möglichkeit steht mir also nicht zur Verfügung)

Grüße

themaster

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von themaster

(Struts 1.1 benutze ich nicht, diese Möglichkeit steht mir also nicht zur Verfügung)

Wieso nicht? Erleichtert vieles. :D

Ich hoffe du kannst Englisch. ;)

Quelle: Struts in Action

-------------------------------------

8.4 Chaining Actions

As an application grows, its Actions tend to evolve into an internal API. Developers

find themselves wanting to join Action classes in a chain, creating a workflow or

macro process. Generally, this is a sign that the business logic is too strongly coupled

with the Action or that the Action hierarchy is too shallow. If there is functionality

that should be shared between Actions, it should be factored into

separate business classes or provided as helper methods in an Action super class.

However, there are techniques you can use to chain Actions together if need be.

The ActionForward returned by an Action’s perform method can be any URI,

including another Action. Developers often use this technique to create workflows

where each Action plays its own part in processing the request.

If you forward from one Action to another in this way, the ActionServlet treats

the forwarded request just as if it had come directly from the client. The Action-

Form bean is reset, repopulated, and revalidated, and, if all goes well, passed to the

second Action. This often upsets developers, since they usually want to set a property

on the form bean and pass that value along to the next Action in the chain.

------------------------

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Jaraz

Wieso nicht? Erleichtert vieles. :D

Das glaube ich gern aber als das Projekt began war es noch eine Beta.

(Das dachte ich zumindest.)

Seit wenn ist 1.1 überhaupt stable?

Quelle: Struts in Action

-------------------------------------

8.4 Chaining Actions

[cut]

------------------------

1) Gibt es das ganze BUch irgendwo online?

2) Es ist ja weniger ein Action Chaining (im eigentlichen Sinn), es ist mehr so

wie bei meiner zweiten Frage.

Eine Action soll auf eine PrepareAction verweisen, damit eine jsp mit gültigen Werten angezeigt werden kann.

Grüße

themaster

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von themaster

Das glaube ich gern aber als das Projekt began war es noch eine Beta.

(Das dachte ich zumindest.)

Seit wenn ist 1.1 überhaupt stable?

Jepp, aber ich schlage mich lieber mit ner Beta rum, als mit nem unvollständigen, teilweise unkomfortablen alten Release.

Original geschrieben von themaster

1.1 ist im Moment im letzten RC Stadium.

1) Gibt es das ganze BUch irgendwo online?

Ich habe es hier gekauft:

http://www.manning.com/ebooks.html

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...