Wie Sie programmgesteuert die FormBean von der nächsten Aktion ausgeführt werden?
Möchte ich vorne eine Aktion auf die nächste konfigurierte Aktion aber vor, dass zum erstellen einer neuen ActionForm-Instanz und haben es im Zusammenhang mit der Aktion weitergeleitet:
Psuedo-code folgt :
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ActionForward forwardPage = mapping.findForward("success");
//Some Code....
....
....
//finally
MyActionForm form = new MyActionForm();
form.setSomeProp(...);
form.setAnotherProp(...);
forwardPage.doSomeMagicAndAssociateWith(form);
return forwardPage;
}
Sorry, wenn das eine dumme Frage, ich bin neu auf alle diese und nicht in der Lage gewesen, eine Antwort zu finden...
Dank
EDIT 1:
Nur um zu klären: ActionForwarded zu "Erfolg" bestanden hatte, bevor das neue feature, das muss ich jetzt hinzufügen.
Möchte ich nur in bestimmten fließt, kommen vor der ersten Strömung (hier als "Erfolg") und machen einige Berechnungen, nach denen im Falle des Erfolgs [ : -) ], um nach vorne den Fluss, um den "Erfolg" der Aktion.
Hoffe mein Punkt ist jetzt klarer.
- Bitte alle anschauen, die Antwort, die ich gepostet unten, wird es helfen, nehme ich an, zur Klärung meiner Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei einer einfachen Konfiguration in der struts-config wie folgt aus:
Uns auf Ihre zweite Aktion, die Sie gerade verwenden
return mapping.findForward("success");
und die Strömung an der zweiten Aktion. Vorausgesetzt, Sie haben einige configs wie die folgenden für jeden ActionForm:dann, was Sie wollen, ist, um Ihre hand auf
form2
und mit Daten füllen, bevor Sie nach vorn.Können Sie natürlich tun, da jede form der (
form1
oderform2
) sind begrenzt auf den angegebenen Umfang mit dem angegebenen Namen, aber das wird sich mit Struts normalen Fluss, und es ist eine schlechte Praxis (Sie müssen wirklich wissen, wie Struts funktioniert, bevor wir in und Stiehlt die show). Das ist, warum ich werde Ihnen nicht sagen, wie es zu tun.Was ich empfehlen Sie tun, sondern ist zu entkoppeln, so viel wie Sie können die beiden Aktionen. Jede Aktion seine Sache tun, keine Handlung wird davon abhängen, Daten pre-gefüllt von einer anderen Aktion.
Zu tun, bewegen Sie den "magic-code" in Ihre zweite Aktion und der Operationen, sobald Sie da sind. Wenn Sie nur tun müssen die Operationen in der Aktion 2, wenn Sie aus Aktion 1, dann können Sie fügen Sie ein flag, um die Konfiguration:
und test für die in Aktion 2 (
request.getParameter("theFlag") != null
zum Beispiel). Auf diese Weise haben Sie die beiden Aktionen gebunden nur durch die Flagge.Eine andere Sache, die Sie tun können ist, verwenden DispatchAction Klassen. Dies ist eine Sammlung von Methoden ausführen, dass konnten Sie alle teilen die gleiche form, so dass Sie vorwärts von einer Methode zur anderen, ohne mehrere Formulare verwalten.
EDIT: Basierend auf Ihren Kommentar: "...meine neue Funktion ausführen, muss etwas Logik davor und nur wenn Sie erfolgreich sind gehen Sie zum ausführen der "original" - Aktion." meinst du, Sie brauchen nur so etwas wie dieses:
Wenn, dass ist es, warum müssen Sie zum erstellen einer neuen ActionForm-Instanz und haben es im Zusammenhang mit der Aktion weitergeleitet?
In der Aktion, können Sie Feldwerte ändern der ActionForm übergeben parameter, aber Sie können nicht erstellen Sie eine neue ActionForm und verbinden es mit dem nächsten JSP-Seite.
Wenn Sie zurücksetzen möchten, alle Daten, die in der form zwischen dem aufrufen der Seite weitergeleitet, die Sie tun können, etwas wie "form.reset();" oder "form.clear();", wodurch diese Methode in der Form-Klasse.
Wenn Sie müssen die Felder in der "success" - Seite, die nicht in der form, können Sie den "request" - Objekt zu speichern, Thesen Felder.
Ich es geschafft habe, auf meinem eigenen. Vielleicht ist meine Lösung zu erklären, was ich bin nicht sicher, ob ich in der Lage gewesen, zu meiner Frage...
Sagen, dies ist mein struts-config.xml Datei:
FirstForm, FirstAction, SecondForm and SecondAction
bestanden hatte vorher mein feature und ich hatte KEINE eingreifen möchten in Ihren code...Den
NewAction
'sexecute()
macht Folgendes: