1. 程式人生 > >springmvc controller間重定向帶引數跳轉的解決方案

springmvc controller間重定向帶引數跳轉的解決方案

RedirectAttributes是spring mvc 3.1版本之後出來的一個功能,專門用於重定向之後還能帶引數跳轉的,
                    這裡用它的addAttribute方法,這個實際上重定向過去以後你看url,是它自動給你拼了你的url。
他有兩種帶參的方式:
第一種: 
attr.addAttribute("param", value);  
這種方式就相當於重定向之後,在url後面拼接引數,這樣在重定向之後的頁面或者控制器再去獲取url後面的引數就可以了,但這個方式因為是在url後面新增引數的方式,所以暴露了引數,有風險
例:

1 2 3 attr.addAttribute(
"name""123");   attr.addAttribute("success""success"); return "redirect:/index";


這樣就相當於:return "redirect:/index?name=123&success=success"

第二種: 
attr.addFlashAttribute("param", value);
這種方式也能達到重新向帶參,而且能隱藏引數,其原理就是放到session中,session在跳到頁面後馬上移除物件。所以你重新整理一下後這個值就會丟掉
例:

1 2 3 attr.addFlashAttribute(
"status","999"); attr.addFlashAttribute("message","登入失敗"); return "redirect:/toLogin";


這種方式確實能重定向帶參,但是有個問題,這個只能重定向到頁面上,也就是說重定向的這個 頁面檢視,能用el表示式直接獲取你帶參的值,比如status 和message ,都能獲取。 可是我重定向到另一個Controller的時候,這 個控制器裡面沒法獲取這兩個引數

我現在有個需求:登入成功,直接重定向其他頁面,登入失敗,又得重定向到登入頁面,直接return的還不行,但是又要帶狀態碼和提示等引數,所以想到用 RedirectAttributes的addFlashAttribute 方式。但是重定向到/toLogin這個控制器裡面的時候,獲取不到 addFlashAttribute 當初新增的屬性。