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表達式就可以取到資料。