javascript
SpringMVC重定向传参
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
SpringMVC Controller間跳轉(zhuǎn),需重定向。
分三種情況:(1)不帶參數(shù)跳轉(zhuǎn)(2)帶參數(shù)拼接url形式跳轉(zhuǎn)(3)帶參數(shù)不拼接參數(shù)跳轉(zhuǎn),頁(yè)面也能顯示。
1、不帶參數(shù)重定向
需求案例:在列表頁(yè)面,執(zhí)行新增操作,新增在后臺(tái)完成之后要跳轉(zhuǎn)到列表頁(yè)面,不需要傳遞參數(shù),列表頁(yè)面默認(rèn)查詢所有項(xiàng)目。
(1)方式一:使用ModelAndView(這是Spring 2.0用到的方法)
return new ModelAndView("redirect:/toList");
這樣可以重定向到toList這個(gè)方法。
(2)方式二:返回String
return "redirect:/toList";
2、帶參數(shù)重定向
需求案例:在列表頁(yè)面有查詢條件,跳轉(zhuǎn)后查詢條件不能丟,這樣就需要帶參數(shù)。
(1)方式一:自己手動(dòng)拼接url
new ModelAndView("redirect:/toList?param1="+value1+"¶m2="+value2);
這樣有個(gè)弊端,就是傳中文可能有亂碼問(wèn)題。
(2)方式二:用RedirectAttributes,調(diào)用addAttribute方法,url會(huì)自動(dòng)拼接參數(shù)。
public String test(RedirectAttributes attributes){
attributes.addAttribute("test","hello");
return "redirect:/test/test2";
}
這樣在test2方法中就可以通過(guò)獲得參數(shù)的方式獲得這個(gè)參數(shù),再傳遞到頁(yè)面。此種方式也會(huì)有中文亂碼的問(wèn)題。
(3)方式三:用RedirectAttributes,調(diào)用addFlashAttribute方法,url會(huì)自動(dòng)拼接參數(shù)。
public String red(RedirectAttributes attributes){
attributes.addFlashAttribute("test","hello");
return "redirect:/test/test2";
}
用上邊的方式進(jìn)行數(shù)據(jù)傳遞,不會(huì)在url出現(xiàn)要傳遞的數(shù)據(jù),實(shí)際上存儲(chǔ)在flashmap中。
FlashAttribute和RedirectAttribute:通過(guò)FlashMap存儲(chǔ)一個(gè)請(qǐng)求的輸出,當(dāng)進(jìn)入另一個(gè)請(qǐng)求時(shí)作為該請(qǐng)求的輸入。典型場(chǎng)景如重定向(POST-REDIRECT-GET模式,1、POST時(shí)將下一次需要的數(shù)據(jù)放在FlashMap;2、重定向;3、通過(guò)GET訪問(wèn)重定向的地址,此時(shí)FlashMap會(huì)把1放到FlashMap的數(shù)據(jù)取出來(lái)放到請(qǐng)求中,并從FlashMap中刪除;從而支持在兩次請(qǐng)求之間保存數(shù)據(jù)并防止了重復(fù)表單提交)
SpringMVC提供FlashMapManager用于管理FlashMap,默認(rèn)使用SessionFlashMapManager,即數(shù)據(jù)默認(rèn)存儲(chǔ)在session中。有兩種方式把a(bǔ)ddFlashAttribute中的數(shù)據(jù)提取出來(lái)。
方法一:利用HttpServletRequest
public String test2(HttpServletRequest request){
Map<String,?> map = RequestContextUtils.getInputFlashMap(request);
System.out.println(map.get("test").toString());
return "/test/hello";
}
方法二:利用Spring提供的標(biāo)簽@ModelAttribute
public String test2(@ModelAttribute("test") String str){
System.out.println(str);
return "/test/hello";
}
以上是在后臺(tái)Controller層獲取值的兩種方法,如果在前臺(tái)頁(yè)面的話,直接利用EL表達(dá)式就可以取到數(shù)據(jù)。
?
轉(zhuǎn)載于:https://my.oschina.net/u/2519523/blog/2873582
總結(jié)
以上是生活随笔為你收集整理的SpringMVC重定向传参的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于vue-cli创建项目(小白)(2)
- 下一篇: 二分图再次总结