2011-02-18 118 views
0

我可以用幾種方式在ValueStack上設置一個屬性。Struts2中應用程序的ValueStack生命週期是什麼?

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 

我需要能夠得到所有這些值回JSP,FreeMarker和Java的像

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

我想知道有關這些設置方法的生命週期。它是否跨越應用程序?是否爲每個請求創建了ValueStack,併爲其設置了應用程序和會話值?

我知道第四種方法是最常用的方法,但我可能不會在所有地方使用這種方法,其中操作類不容易訪問。

我對自己在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()--> 

訪問其他疑問,我也想知道怎麼點在5日都stack.getContex().put()stack.set()的作品?據我所知,在第6個resultDTO我正在訪問,是一個不同的根,並在7日,它是默認的根,這是ValueStack的孩子。 8日開始從默認根目錄搜索。

我通過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和相當混亂這個鏈接http://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL

說了這些,我有點傾向於使用stack.getContext().put()方法,我可以清楚地看到中的值設置URL作爲?調試=瀏覽器。告訴我,如果我出錯了。

回答

0

ValueStack是每個請求。如果您將值放在堆棧中,稍後可以在請求中訪問它們(即在視圖層中),但不會存在重定向,這將是一個新的HTTP請求並具有其自己的ValueStack

在正常情況下,URL中或表單帖子中的參數將使用動作的setter方法設置在動作上。在攔截器中,您可以直接將值添加到堆棧。例如,ExceptionMappingInterceptor使用stack.push(Object)方法發佈在錯誤頁面上使用的異常。

  • stack.getContext().put(String, Object) - 將鍵/值放置在堆棧上的貼圖上。地圖代表堆棧的上下文。
  • stack.set(String, Object) - 將鍵/值放置在堆棧中的地圖上。我不確定這與前面的方法有什麼關係,除了它是一個不同的地圖。
  • stack.push(Object) - 這將對象放置在堆棧的根目錄。

你不應該在視圖層中放置任何東西在堆棧上,所以我很好奇你試圖做什麼,這是必要的。

+0

我正在嘗試使用值堆棧來傳遞預結果鉤子和一些泛型pojos中的某些數據集,以便某些setter和getter不會在所有操作類中重複。在一個場合中,我返回一些數據作爲流結果,因爲我需要在Action類中獲取數據表單值棧。 – 2011-02-19 09:08:31

相關問題