Spring MVC 提供了以下幾種途徑輸出模型資料
1.ModelAndView:
處理方法傳回值類型為ModelAndView時,方法體即可通過該對象添加模型資料
既包含視圖資訊,也包含模型資料資訊。
ModelAndView中包含兩個添加資料模型的方法:
1.ModelAndView addObject(String attributeName, Object attributeValue)
2.ModelAndView addAllObject(Map<String,?>modelMap)
ModelAndView包含兩個設定視圖的方法:
1.void setView(View view)
2.void setViewName(String viewName)
執行個體:
@RequestMapping(value="testModelAndView")
public ModelAndView testModelAndView () {
System.out.println("entry in ModelAndView");
ModelAndView mv = new ModelAndView();
mv.setViewName("success");
// ModelAndView中模型資料的值,都是放置到request範圍中的
mv.addObject("name", "MIKE");
return mv;
}
success.jsp中:
${requestScope.name}顯示輸出
注意事項:
核心業務方法的傳回值為ModelAndView:模型資料,視圖
ModelAndView當中模型資料是放置到請求範圍當中的
2.Map及Model:
入參為org.springframework.ui.Model/org.springframework.ui.ModelMap或java.util.Map時,
處理方法傳回時,Map中的資料會自動添加到模型中。
具體步驟:
SpringMVC 在調用方法前會建立一個隐含的模型對象作為模型資料的存儲容器
如果方法的入參為Map或Model類型,SpringMVC會将隐含模型的引用傳遞給入參。
在方法體内,可以通過這個入參對象通路到模型中的所有資料,
也可以向模型中添加新的屬性資料
使用方法:
Map.put(String , Object)
Model.addAttribute(String , Object)
ModelMap.addAttribute(String, Object)
執行個體:
Map:
@RequestMapping(value="/testMap")
public String testMap(Map<String,Object>map) {
map.put("age", 12);
return "success";
}
Model:
@RequestMapping(value="/testModel")
public String testModel(Model model) {
model.addAttribute("email", "[email protected]");
return "success";
}
ModelMap:
@RequestMapping(value="/testModelMap")
public String testModelMap(ModelMap modelMap) {
modelMap.addAttribute("city", "wuhan");
return "success";
}
[email protected]:
将模型中的某個屬性暫存到HttpSession中,以便多個請求之間可以共享這個屬性。
@SessionAttributes除可以通過屬性名指定需要放到會話中的屬性外,還可以通過
模型屬性的對象類型指定哪些模型屬性需要放到會話中
@SessionAttributes(type=User.class)
會将隐含模型中所有類型為User.class的屬性添加到會話中
@SessionAttributes(value={"user1", "user2"})
@SessionAttributes(types={User.class, Dept.class})
@SessionAttributes(value={"user1", "user2"}, types={Dept.class})
注意事項:
1.要求放置的值,必須在模型資料裡面(request範圍中有限)
2.複制的方式:
通過屬性的key值完成session的共享資料設定
value:String[]
value=["a","b"]
也可以通過模型資料當中的類型,共享資料的設定
[email protected]:
1.在方法定義上使用@ModelAttribute注解:
SpringMVC 在調用目标處理方法前,會逐個調用在方法級上标注了@ModelAttribute的方法
1.1 修飾沒有傳回值的方法
執行ModelAttribute修飾方法
擷取的原始資料放置到請求範圍中指定key對應的value
pojo入參會從請求範圍當中查找指定key對應的value,找到的話,會将值賦給入參
前端使用者輸入的值與入參進行綁定
執行個體:
@ModelAttribute
public void start (Map<String,Object>map) {
// 模拟資料庫通路
UserInfo info = new UserInfo(101,"Tom","[email protected]","2015-10-12");
map.put("abc", info);
}
@RequestMapping(value="/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
System.out.println("userInfo:"+ info);
return "success";
}
1.2 修飾有傳回值的方法
執行個體:
@ModelAttribute(value="abc")
public UserInfo start (Map<String,Object>map) {
// 模拟資料庫通路
UserInfo userInfo = new UserInfo(101,"Tom","[email protected]","2015-10-12");
return userInfo;
}
@RequestMapping(value="/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value="abc")UserInfo info) {
System.out.println("userInfo:"+ info);
return "success";
}
2.在方法的入參前使用@ModelAttribute注解:
可從隐含對象中擷取隐含的模型資料中擷取對象
再将請求參數綁定到對象中,再傳入入參
将方法入參對象添加到模型中