Struts2中的頁面跳轉

內容源自:Struts2中的頁面跳轉app

 

1、全局頁面的設置
若是<package>包中的一些action都返回success,而且返回的頁面都是同一個JSP頁面,這樣就能夠配置全局的結果頁面。
全局結果頁面針對的當前的包中的全部的Action,可是若是局部還有結果頁面,會優先局部的。
設置全局頁面的標籤是框架

<global-results>
                <result>/demo/suc.jsp</result>
            </global-results>

局部結果頁面jsp

<result>/demo/suc.jsp</result>

2、頁面跳轉類型
實際上在Struts2框架中,一個完整的結果視圖配置文件應該是:spa

<action name="Action名稱" class="Action類路徑" method="方法名">
    <result name="邏輯視圖名稱" type="結果類型">
        <param name="參數名稱">參數值</param>
    </result>
</action> 

其中的type就是頁面跳轉類型。
Struts2中支持多種頁面跳轉類型,常見的結果類型去struts-default.xml中查找。
結果頁面使用<result>標籤進行配置,包含兩個屬性:
name  -- 邏輯視圖的名稱
type  -- 跳轉的類型,一些經常使用的類型以下。.net

一、dispatcher        
這種方式是struts2中默認的轉發類型,即內部請求轉發,相似於forward的方式。用於指定使用JSP做爲視圖的結果類型。 Action--->JSP

二、redirect          
重定向. Action--->JSP或者Action
用於直接跳轉到其餘URL的結果類型。
1)這種結果類型與dispatcher結果類相對,dispatcher結果類型是將請求forword(轉發)到指定的JSP資源;而redirect結果類型,則意味着將請求redirect(重定向)到指定的視圖資源。
2)dispatcher與redirect的差異就是重定向和轉發的差異:重定向會丟失因此的參數、請求屬性--固然也就丟失了Action的出來結果。
3)使用redirect結果類型的效果是,系統將調用HttpServletResponse的sendRedirect(String)方法來重定向指定視圖資源,這種重定向的效果就是從新產生一個請求,所以全部的請求參數、請求屬性、Action實例和Action中封裝的屬性所有丟失。地址欄的URL會發生改變。
4)配置一個redirect類型結果,能夠指定以下兩個參數。
location:改參數指定Action處理完用戶請求後跳轉的地址。
parse:改參數指定是否容許在location參數值中使用表達式,改參數默認爲true。與前面的相似,一般無需指定parse屬性值。
5)使用這個類型也能夠指定跳到一個Action,只是須要添加.action後綴,已達到redirectAction結果類型效果。code

重定向到jspxml

<action name="redirect">
    <result type="redirect">/add.jsp</result>
</action>

重定向到actionblog

<action name="redirect">
    <result type="redirect">addUser.action</result>
</action> 

 

三、redirectAction    
1)這種方式能夠簡單的理解成轉向到另外一個Action。這種配置每每在下面的狀況下須要用到:例如,當管理員添加完一個用戶後,系統自動跳轉到用戶列表的界面。
2)這種結果類型與redirect類型很是類似,同樣是從新生成一個全新的請求。但與redirect結果類型區別在於:redirectAction使用ActionMapperFactory提供的ActionMapper來重定向請求。
3)配置一個redirect類型的結果,能夠指定以下兩個參數。(針對不在同一個配置文件中)
actionName:該參數指定重定向的Action名。
namespace:該參數須要指定須要重定向的Action所在命名空間。資源

<action name="redirectAction">
   <result type="redirectAction">listAction</result>
</action>

該action必須和redirectAction處在同一個package下面。那麼若是不在同一個包下,則需進行以下配置:開發

<result type="redirectAction">
   <param name="actionName">XXX</param>
   <param name="namespace">YYY</param>
</result>

4)使用redirectAction結果類型時,系統將從新生成一個請求,只是改請求的URL不是一個具體的視圖資源,而是另外一個Action。所以前一個Action處理結果、請求參數、請求屬性會所有丟失。

 

四、chain             
多個action之間跳轉.從一個Action轉發到另外一個Action.  Action--->Action
注意: 不能經過 type=dispatcher 的方式轉發到一個 Action

例如:

<result name="test" type="chain">/com.chen/testAction.action</result>

而如下方式錯誤:

<result name="test" type="dispatcher">/com.chen/testAction.action</result>

chain也用了跳轉到另外一個Action,與前面的不一樣的是,他的請求參數和屬性均可以保留,好比,系統中的刪除功能,回到以前查詢的action,要保存頁碼回到以前刪除記錄的當前頁,用chain就能夠作到,幾乎就是前面兩種的加強版。推薦開發中直接忽略redirect和redirectAction類型,直接用這個chain就行了。

 

五、stream            -- 文件下載時候使用的.

 

3、關於頁面衝突
當使用一個Action標籤完成多個Action配置時,可能會出現Input結果視圖衝突的狀況。也就是說,在不一樣邏輯中跳入的input邏輯視圖是同一個,此時咱們能夠在本身的Action方法上加上 @InputConfig(resultName="邏輯視圖的名稱")的註解而後再在Result中配置便可。

相關文章
相關標籤/搜索