Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

2 Fragen zu Struts

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.