網頁

2017/12/14

Spring MVC 重新導向(redirect)傳遞參數

在Spring MVC中,若要從一個Controller重新導向(redirect)至另一個Controller並傳遞參數的方法如下。

在Controller中若要重新導向至另一個Controller(或jsp頁面),可使用ModelAndView搭配redirect:的前置符字串,並使用RedirectAttributes來傳遞參數至重新導向的Controller,例如hello()出重新導向至/world


@RequestMapping(value = "/hello")
public ModelAndView hello(RedirectAttributes redirectAttributes) {  // RedirectAttributes必須放在準備重新導向的方法參數中,Spring MVC會自動建立這個物件來讓我們使用
  
  redirectAttributes.addFlashAttribute("message", "This is the String passed by redirect"); // 在RedirectAttributes物件中呼叫addFlashAttribute()加入一個要被傳遞的參數
  ModelAndView mv = new ModelAndView("redirect:/world"); // 重新導向至 /world,這個request會被另一個Controller的方法來處理
  return mv;
}

在重新導向的world()方法中接收參數。


@RequestMapping(value = "/world") // 這個方法負責處理來自hello的重新導向請求
public ModelAndView world (@ModelAttribute("message") String message) { // 重新導向透過RedirectAttributes傳遞的參數用@ModelAttribute來接收。
  System.out.println(message);  // 印出 "This is the String passed by redirect"
  ModelAndView mv = new ModelAndView("result")
  return mv;
}

重新導向時無法透過ModelAndView.addObject()ModelMap.addAttribute()來傳遞參數,可以參考這篇,因為重新導向是經由在response header的location來導向至新的url,所以瀏覽器是重新發出一個location所指向的url位址,因此在重新導向時原本的request中所添加的attributes都不會跟著一起傳送。

RedirectAttributes.addFlashAttribute()是利用FlashMap將參數儲存於session,所以可以在重新導向的Controller或jsp頁面中取得參數。


如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


參考:

5 則留言:

  1. 廣告點起來 你的文章對我很有幫助 感恩

    回覆刪除
  2. @Tai 很開心文章對你有幫助,感謝您的支持。

    回覆刪除
  3. 特地關掉adblock來點廣告,謝謝你的文章~

    回覆刪除
  4. 謝謝大大 ,已點擊廣告

    回覆刪除