Frage

Ich benutze Streben 2.

Ich möchte von einer Aktion zu der Seite zurückkehren, die sie aufgerufen hat.

Angenommen, ich bin auf der Seite x.jsp, rufe ich Visual Action auf, um CSS-Einstellungen in der Sitzung zu ändern;Ich möchte zurückkehren x.jsp anstatt auf eine feste Seite (d. h. home.jsp)

Hier ist das Relevante struts.xml Fragment:

<action
   name="Visual"
   class="it.___.web.actions.VisualizationAction">
   <result name="home">/pages/home.jsp</result>
</action>

Natürlich mein VisualizationAction.execute() kehrt zurück heim.

Gibt es eine „magische“ Konstante (wie zum Beispiel INPUT_PAGE), die ich zurückgeben kann, um den Trick auszuführen?

Muss ich eine aufwändigere Methode verwenden (z. B.die Anforderungsseite extrahieren und dorthin weiterleiten)?

T.I.A.

War es hilfreich?

Lösung

Sie können ein dynamisches Ergebnis in struts.xml verwenden.Zum Beispiel:

<action
   name="Visual"
   class="it.___.web.actions.VisualizationAction">
   <result name="next">${next}</result>
</action>

Anschließend erstellen Sie in Ihrer Aktion ein Feld mit dem Namen „next“.Um die Aktion aufzurufen, übergeben Sie also den Namen der Seite, zu der Sie als Nächstes weiterleiten möchten.Die Aktion gibt dann „next“ zurück und Struts weiß, zu welcher Seite es gehen muss.

Eine schönere Erklärung gibt es zu diesem Beitrag: Paketüberfluss

Andere Tipps

return INPUT;

wird den Zweck erfüllen.Die INPUT-Konstante wird in der Aktionsschnittstelle selbst definiert.Es weist darauf hin, dass zum Handeln mehr Input erforderlich ist.

Wenn Sie mit „Seite aufrufen“ die Seite gemeint haben, die Sie zur Aktionseingabeseite geführt hat, muss Ihre Eingabeseite den HTTP-Header „Referer“ im Anforderungsbereich für die Aktion speichern.

Meine Lösung würde eine Schnittstelle und einen Abfangjäger umfassen.Sie implementieren die folgende Schnittstelle für alle Aktionen zu welchem Sie möchten wahrscheinlich umleiten:

public interface TargetAware {
  public String getTarget();
  public void setTarget(String target);
}

Der Abfangjäger stellt bei Bedarf lediglich sicher, dass das Ziel festgelegt wird:

public class SetTargetInterceptor extends MethodFilterInterceptor implements Interceptor {
   public String doIntercept(ActionInvocation invocation) {
      Object action = invocation.getAction();
      HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
      if (action instanceof TargetAware) {
         TargetAware targetAwareAction = (TargetAware) action;
         if (targetAwareAction.getTarget() == null)
            targetAwareAction.setTarget(getCurrentUri(request));
      }     
      return invocation.invoke();
   }

   // I'm sure we can find a better implementation of this...
   private static String getCurrentUri(HttpServletRequest request) {
      String uri = request.getRequestURI();
      String queryString = request.getQueryString();
      if (queryString != null && !queryString.equals(""))
         uri += "?" + queryString;
      return uri;
   }

   public void init() { /* do nothing */ }
   public void destroy() { /* do nothing */ }
}

Von da an, sobald diese beiden Teile vorhanden sind und Ihre Aktionen dies umsetzen TargetAware Schnittstelle (wenn Sie damit rechnen, zu ihnen umleiten zu müssen), dann haben Sie Zugriff auf eine target Parameter in Ihren JSPs, wann immer Sie ihn benötigen.Geben Sie diesen Parameter an Ihre weiter VisualizationAction (was genauso gut auch das implementieren könnte TargetAware Schnittstelle!), und so weiter SUCCESS, Weiterleitung wie von Vincent Ramdhanie erklärt:

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result type="redirect">
      <param name="location">${target}</param>
      <param name="parse">true</param>
   </result>
</action>

Ich habe nicht jedes einzelne Detail dieser Strategie ausprobiert.Achten Sie insbesondere auf die Notation rund um das redirect Ergebnistyp (abhängig von Ihrer spezifischen Version von Struts2:2.0.x und 2.1.x können sich hierin unterscheiden...).

Ich bevorzuge die Art und Weise, wie Sie Benutzer durch bestimmte Aktionen navigieren.

http://domain.com/myAction.action

Sie könnten einen Parameter als Indikator dafür verwenden, dass Sie das aktuelle Design ändern möchten:d.h.

http://domain.com/myAction.action?changeDesign=silver_theme

Dann schreiben Sie einen Interceptor für Struts 2, dessen Logik darin besteht, das Vorhandensein eines solchen Parameters „changeDesign“ zu überprüfen, und dieser Interceptor übernimmt die notwendige Arbeit zum Ändern des Designs und steuert den Arbeitsablauf.Mit Interceptor entkoppeln Sie Ihre Aktionen von der übergreifenden Logik.

Ok, in Ihrer Klasse it.___.web.actions.VisualizationAction müssen Sie einen String-Wert zurückgeben, der INPUT enthält. Dann müssen Sie in struts.xml etwa Folgendes festlegen:

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result name="input">yourJspPage.jsp</result>
</action>

Dies führt Sie zur gewünschten Seite.Das sollte funktionieren, ich arbeite seit 2 Monaten an struts2

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top