2013-03-01 32 views
1

這是我的撐杆2流,其中我使用行動鏈接未使用動作鏈接在目標操作中設置實例成員值?

JSP --->措施1 --->措施2 ---> ResultJsp

隨着動作鏈接,我的理解是,請求被從轉發動作1至action2.So如果我通過一些參數從動作1到動作2 應該在新的動作實例變量(用於新的行動創造/值堆)來設定。但它不是發生

下面是我的代碼在動作1

@Result(name = "displayEmployee",type = "chain", 
     params = { 
      "namespace", "/employee", 
      "actionName", "Employee-lookup!search", 
      "empMode", "true" 

     }) 


@Action("display-employee!displayEmployee") 
    public String displayEmployee() { 
    return "displayEmployee"; 
    } 

Now in Action 2即display-employee,我擁有名稱爲empMode的布爾屬性。但我得到的值爲假,但我應該得到它真的 因爲我將它作爲屬性傳遞給結果註釋。根據我在行動鏈中的理解,所有請求參數都是從動作1轉發到動作2的 。基本上爲action2創建了新的值堆棧,其中包含在action1中存在的變量 。那麼爲什麼在action 2中沒有爲empMode屬性設置true true?

+0

沒有ü配置在任何地方截擊 – PSR 2013-03-01 14:20:02

+0

u能證明代碼 – PSR 2013-03-01 14:26:30

+0

嘗試用默認的堆棧once.Just只用於測試 – PSR 2013-03-01 14:42:24

回答

2

我不認爲你可以做到這一點,有一種能夠通過使用鏈式結果類型的附加參數沒有提到:http://struts.apache.org/release/2.3.x/docs/action-chaining.html

結果是連鎖型的...所以它需要解釋並處理你的參數,因爲之後開始一個新的動作。但鏈條沒有這個功能(查看源代碼):http://grepcode.com/file/repo1.maven.org/maven2/org.apache.struts.xwork/xwork-core/2.3.1.1/com/opensymphony/xwork2/ActionChainResult.java

如果這是一個正常的重定向,他們可以像這樣將這些參數添加到請求中。

換句話說,添加所需的屬性,動作和鏈將做什麼,你需要它,因爲鏈條結果沒有設施來處理其他屬性則「命名空間」和「行動」。

+0

+1 ...我會補充說,根據文檔,行動鏈接是不鼓勵的 – 2013-03-01 22:13:32

+0

我不記得文檔是如此直接,現在是好的。我之前在這裏討論過這個問題:http://stackoverflow.com/questions/4956603/action-redirect-in-struts-xml我個人認爲鏈接表示太厚的操作。如果你真的想重用動作邏輯,它應該被移到它可能屬於的服務層。鏈接和我認爲struts2-jquery插件是新的struts2用戶使用的兩個最糟糕的事情之一。 – Quaternion 2013-03-01 22:58:11

+0

對於記錄來說,它來自http://struts.apache.org/release/2.0.x/docs/action-chaining.html,綠色的,*不要在家裏嘗試這種方式*:通常,不建議操作鏈接。首先探索其他選項,例如Post After After技術。 – 2013-03-02 14:01:40

0

,如果你沒有其他選擇,只能用行動鏈接和需要從一個參數傳遞給其他的,請嘗試以下方法

  1. 的有兩個動作對應的getter/setter方法。例如:如果您想將'empMode'參數從Action1傳遞給Action2。在兩個操作中都有getEmpMode()/ setEmpMode()方法。

  2. 將參數添加到您想要傳遞給動作上下文中的參數映射中。您可以使用ActionContext.getContext()。getParameters()來訪問參數映射。將您想要傳遞給Action2的新參數從Action1添加到此映射中。提供的Action2具有相應的getter/setter用於新參數,並且假設在堆棧中配置了「params」攔截器,Action2將被正確填充。