Struts2中的頁面跳轉


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

 

一、全局頁面的設置
如果<package>包中的一些action都返回success,並且返回的頁面都是同一個JSP頁面,這樣就可以配置全局的結果頁面。
全局結果頁面針對的當前的包中的所有的Action,但是如果局部還有結果頁面,會優先局部的。
設置全局頁面的標簽是

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

局部結果頁面

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

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

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

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

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

2、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結果類型效果。

重定向到jsp

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

重定向到action

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

 

3、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處理結果、請求參數、請求屬性會全部丟失。

 

4、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就好了。

 

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

 

三、關於頁面沖突
當使用一個Action標簽完成多個Action配置時,可能會出現Input結果視圖沖突的情況。也就是說,在不同邏輯中跳入的input邏輯視圖是同一個,此時我們可以在自己的Action方法上加上 @InputConfig(resultName="邏輯視圖的名稱")的注解然后再在Result中配置即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM