天天看點

SpringMVC——重定向(不帶參數重定向、帶參數重定向、FlashAttribute、RedirectAttribute)

SpringMVC Controller間跳轉,需重定向。

分三種情況:(1)不帶參數跳轉(2)帶參數拼接url形式跳轉(3)帶參數不拼接參數跳轉,頁面也能顯示。

需求:在清單頁面,執行新增操作,新增在背景完成之後要跳轉到清單頁面,不需要傳遞參數,清單頁面預設查詢所有項目。

(1)方式一:使用ModelAndView(這是Spring 2.0用到的方法)

這樣可以重定向到toList這個方法。

(2)方式二:傳回String

需求:在清單頁面有查詢條件,跳轉後查詢條件不能丢,這樣就需要帶參數。

(1)方式一:自己手動拼接url

這樣有個弊端,就是傳中文可能有亂碼問題。

(2)方式二:用RedirectAttributes,調用addAttribute方法,url會自動拼接參數。

頁面取值直接用el表達式能獲得到,原理是放到session中,session在跳到頁面後馬上移除對象,是以重新整理後這個值就會丢掉。 

這樣在test2方法中就可以通過獲得參數的方式獲得這個參數,再傳遞到頁面。此種方式也會有中文亂碼的問題。

(3)方式三:用RedirectAttributes,調用addFlashAttribute方法,url會自動拼接參數(url會顯示要傳遞的資料)。

 用上邊的方式進行資料傳遞,不會在url出現要傳遞的資料,實際上存儲在flashmap中。

FlashAttribute和RedirectAttribute:通過FlashMap存儲一個請求的輸出,當進入另一個請求時作為該請求的輸入。

典型場景如重定向(POST-REDIRECT-GET模式):

1、POST時将下一次需要的資料放在FlashMap;

2、重定向;

3、通過GET通路重定向的位址,此時FlashMap會把1放到FlashMap的資料取出來放到請求中,并從FlashMap中删除;

進而支援在兩次請求之間儲存資料并防止了重複表單送出。

SpringMVC提供FlashMapManager用于管理FlashMap,預設使用SessionFlashMapManager,即資料預設存儲在session中。有兩種方式把addFlashAttribute中的資料提取出來。

方法一:利用HttpServletRequest

方法二:利用Spring提供的标簽@ModelAttribute

以上是在背景Controller層擷取值的兩種方法,如果在前台頁面的話,直接利用EL表達式就可以取到資料。

繼續閱讀