在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廣告,感恩。
參考:
廣告點起來 你的文章對我很有幫助 感恩
回覆刪除@Tai 很開心文章對你有幫助,感謝您的支持。
回覆刪除特地關掉adblock來點廣告,謝謝你的文章~
回覆刪除謝謝樓上大德
回覆刪除謝謝大大 ,已點擊廣告
回覆刪除