將request導入到@Controller內的function後,
function運作完畢後有幾種返回的形式可以選擇:
1.ModelAndView
當返回為ModelAndView時,
其中已經包含了顯示(View)和模型(Model),
SpringMVC即可透過取得的Model去顯示在View上,
其中的Model可以視為一個Map<String,Object>對象,
有幾個常用的方法如下:
@Controller @RequestMapping("/testR") public class TestResponse { @RequestMapping("/mav") public ModelAndView mar() { ModelAndView mav = new ModelAndView(); mav.addObject("model_name", model_object); //添加一個名為model_name的Object對象 mav.addAllObjects(modelMap); //添加一個Map<String,Object>對象,包含多個Object mav.setView(view); //設定View對象 mav.setViewName("/testR/mav"); //設定返回的view名稱,對應InternalResourceViewResolver設定的路徑 return mav; } }
2.@ModelAttribute
如果希望在function中添加模型,
可以在function的參數中加入@ModelAttribute,
SpringMVC會將request的param對應到你指定的Object中,
@Controller @RequestMapping("/testR") public class TestResponse { @RequestMapping("/mav") public String mar(@ModelAttribute("user") User user) { user.setName("test"); return "/testR/mar"; } }
如果是希望在執行每一個function前,
先去做參數對應Object的行為,
可以將@ModelAttribute添加在function前端,
@Controller @RequestMapping("/testR") public class TestResponse { @RequestMapping("/mav") public String mar(@ModelAttribute("user") User user) { user.setName("test"); return "/testR/mar"; } @ModelAttribute("user") public User setUser() { User user = new User(); user.setId("test100"); user.setName("guest"); return user; } }
這樣在執行mar()之前,
會先去執行setUser的操作,
並將一個名為user的User對象添加到模型中,
然後在執行mar()時,
會將request內有對應User的資料覆蓋在user上。
3.Map & Model
springMVC在執行方法前會先建立一個隱含的模型儲存容器,
如果request中有包含物件模型的話,
便會加入到這個容器中,
在function中也可以從這個容器取得物件,
@RequestMapping("/model") public String model(ModelMap modelMap) { User user1 = new User(); user1.setId("wd123"); user1.setName("我的名字"); modelMap.addAttribute("user1", user1); User defaultUser = (User) modelMap.get("user"); defaultUser.setName("defaultName"); return "/testR/model"; }
則在返回的/testR/model頁面上,
便可以取得兩個USER物件,
一個是名為user的USER物件,
另一個是名為user1的USER物件。
4.@SessionAttributes
可以在@Controller中標註一個@SessionAttributes,
來將物件模型儲存在HttpSession中,
記得用完要進行setComplete()清除該次的會話資料。
@Controller @RequestMapping("/testR") @SessionAttributes("user") public class TestResponse { @RequestMapping("/session") public String session(ModelMap modelMap, SessionStatus sessionStatus) { User defaultUser = (User) modelMap.get("user"); if (defaultUser != null) { sessionStatus.setComplete(); } return "/testR/session"; }
謝謝你的分享。
回覆刪除謝謝你的分享。
回覆刪除