Frage

Ich kann eine Eigenschaft festlegen ValueStack In vielen Wegen.

 ValueStack stack = ActionContext.getContext().getValueStack();
 stack.getContext().put("resultDTO",resultDTO);  //1. creates a different branch 
 //parallel to root

 stack.set("resultDTO", resultDTO); //2. pushes on root as a Map?
 stack.push(resultDTO); //3. pushes on root
 myActionClass.setProperty(); //4. normal action accessor

Ich muss in der Lage sein, alle diese Werte in JSP, Freemarker und Java wiederherzustellen

 stack.findValue() or stack.findString().    

Ich möchte mehr über den Lebenszyklus jeder dieser vier Einstellungsmethoden erfahren.Ist es anwendungsübergreifend?Ist der ValueStack Jede Anfrage erstellt und die Anwendungs- und Sitzungswerte für jede Anfrage darin festgelegt?

Ich weiß, dass die vierte Methode der gebräuchlichste Ansatz ist, aber ich verwende sie möglicherweise nicht überall dort, wo die Aktionsklasse nicht leicht zugänglich ist.

Ich habe weitere Zweifel bezüglich des Zugriffs in JSP

 <s:push value="resultDTO" ><s:property value="data.form1[0]" /></s:push>
 <!--5.works for context.put() & stack.set() both-->

 <s:property value="#resultDTO.data.form1[0].countryofissue" /> <!--6.context.put()-->
 <s:property value="resultDTO.data.form1[0].countryofissue" />  <!--7.stack.set()-->
 <s:property value="data.form1[0].countryofissue" />            <!--8.stack.push()-->

Ich möchte auch wissen, wie der 5. Punkt in beiden Fällen funktioniert stack.getContex().put() Und stack.set()?Ich verstehe das im 6 resultDTO Ich greife darauf zu, es ist ein anderer Root und im 7. ist es das untergeordnete Element des Standard-Roots, nämlich ValueStack.Im 8. beginnt die Suche im Standard-Root.

Ich ging durch http://struts.apache.org/2.0.11.1/docs/ognl.html, http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/util/ValueStack.html und dieser Link ist ziemlich verwirrend http://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL

Trotz alledem bin ich wenig geneigt, sie zu verwenden stack.getContext().put() Methode, da ich die Werte deutlich sehen kann, indem ich die URL als festlege ?debug=Browser.Sagen Sie mir Bescheid, wenn ich falsch liege.

War es hilfreich?

Lösung

Der ValueStack ist pro Anfrage.Wenn Sie Werte auf dem Stapel platzieren, sind sie später in der Anfrage (d. h. in der Ansichtsschicht) zugänglich, würden aber eine Umleitung nicht überleben, was eine neue HTTP-Anfrage wäre und eine eigene hätte ValueStack.

Unter normalen Bedingungen würden Parameter in der URL oder in einem Formularbeitrag mithilfe der Setter-Methoden der Aktion für die Aktion festgelegt.In einem Interceptor können Sie Werte direkt zum Stapel hinzufügen.Zum Beispiel die ExceptionMappingInterceptor nutzt die stack.push(Object) Methode zum Veröffentlichen von Ausnahmen zur Verwendung auf Fehlerseiten.

  • stack.getContext().put(String, Object) – Platziert den Schlüssel/Wert in einer Karte, die sich auf dem Stapel befindet.Die Karte stellt den Kontext des Stapels dar.
  • stack.set(String, Object) – Platziert den Schlüssel/Wert in einer Karte, die sich auf dem Stapel befindet.Ich bin mir nicht sicher, was das mit der vorherigen Methode zu tun hat, außer dass es sich um eine andere Karte handelt.
  • stack.push(Object) – Dadurch wird das Objekt im Stammverzeichnis des Stapels platziert.

Sie sollten aus der Ansichtsebene heraus nichts auf dem Stapel platzieren müssen, daher bin ich gespannt, was Sie tun möchten, was dies erfordert.

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