將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";
}
謝謝你的分享。
回覆刪除謝謝你的分享。
回覆刪除