SpringMVC 重定向參數RedirectAttributes實例

重定向參數RedirectAttributes

SpringMVC 中常用到 redirect 來實現重定向。但使用場景各有需求,如果隻是簡單的頁面跳轉顯然無法滿足所有要求,比如重定向時需要在 url 中拼接參數,或者返回的頁面需要傳遞 Model。

SpringMVC 用 RedirectAttributes 解決瞭這兩個需要。

1. addAttribute

@RequestMapping("/save")
public String save(User user, RedirectAttributes redirectAttributes) {
    redirectAttributes.addAttribute("param", "value1");
    return "redirect:/index";
}

請求 /save 後,跳轉至/index,並且會在url拼接 ?param=value1。

2. addFlashAttribute

@RequestMapping("/save")
public String save(User user, RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("param", "value1");
    return "redirect:/index";
}

請求 /save 後,跳轉至 /index,並且可以在 index 對應的模版中通過表達式,比如 jsp 中 jstl 用 ${param},獲取返回值。該值其實是保存在 session 中的,並且會在下次重定向請求時刪除。

RedirectAttributes 中兩個方法的簡單介紹就是這樣。

重定向攜帶參數問題

問題描述

A.jsp發送請求進入Controller,並想重定向到B.jsp並攜帶參數,發現攜帶的參數前臺獲取不到,然後采用以下方法即可

   @RequestMapping("/index")
    public String delete(String id, RedirectAttributes redirectAttributes) {
           redirectAttributes.addFlashAttribute("msg","刪除成功!");
           return "redirect:hello";
    }
    @RequestMapping("hello")
    public String index( @ModelAttribute("msg") String msg) {
         
          return "sentinel";
    }

首先進入delete方法,將msg放在redirectAttributes裡,然後重定向到hello,通過@ModelAttribute(“msg”) String msg獲取到msg的值,那麼自然sentinel頁面就能獲取到msg的值。

問題來源

B.jsp發送請求,跳轉到A.jsp,並將請求所產生的數據攜帶到A頁面。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: