1.??? SpringMVC 輸出模型數據概述
提供了以下幾種途徑輸出模型數據:
?ModelAndView: 處理方法返回值類型為 ModelAndView 時, 方法體即可通過該對象添加模型數據
?Map 及 Model: 入參為 org.springframework.ui.Model、
org.springframework.ui.ModelMap 或 java.uti.Map 時,處理方法返回時,Map 中的數據會自動添加到模型中。
?@SessionAttributes: 將模型中的某個屬性暫存到 HttpSession 中,以便多個請求之間可以共享這個屬性
?@ModelAttribute: 方法入參標注該注解后, 入參的對象就會放到數據模型中
2.??? 處理模型數據之 ModelAndView
①?? 控制器處理方法的返回值如果為 ModelAndView, 則其既包含視圖信息,也包含模型數據信息。
②?? 添加模型數據:
MoelAndView addObject(String attributeName, Object attributeValue)
ModelAndView addAllObject(Map<String, ?> modelMap)
③?? 設置視圖:
void setView(View view)
void setViewName(String viewName)
/*** 目標方法的返回類型可以是ModelAndView類型* 其中包含視圖信息和模型數據信息*/ @RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ System.out.println("testModelAndView"); String viewName = "success"; ModelAndView mv = new ModelAndView(viewName ); mv.addObject("time",new Date().toString()); //實質上存放到request域中 return mv; }
time: ${requestScope.time }
3.??? 處理模型數據之 Map
Spring MVC 在內部使用了一個 org.springframework.ui.Model 接口存儲模型數據
具體使用步驟
1)???????? Spring MVC 在調用方法前會創建一個隱含的模型對象作為模型數據的存儲容器。
2)???????? 如果方法的入參為 Map 或 Model 類型,Spring MVC 會將隱含模型的引用傳遞給這些入參。
3) ? ? ? ? ??在方法體內,開發者可以通過這個入參對象訪問到模型中的所有數據,也可以向模型中添加新的屬性數據
?
//目標方法的返回類型也可以是一個Map類型參數(也可以是Model,或ModelMap類型) @RequestMapping("/testMap") public String testMap(Map<String,Object> map){ //【重點】 System.out.println(map.getClass().getName()); //org.springframework.validation.support.BindingAwareModelMap map.put("names", Arrays.asList("Tom","Jerry","Kite")); return "success"; }
<!-- 測試 Map 作為處理返回結果 --> <a href="springmvc/testMap">testMap</a> |
①???? 增加成功頁面,顯示結果
names: ${requestScope.names } |
1.??? 處理模型數據之 SessionAttributes 注解
若希望在多個請求之間共用某個模型屬性數據,則可以在控制器類上標注一個 @SessionAttributes, Spring MVC 將在模型中對應的屬性暫存到 HttpSession 中。
@SessionAttributes 除了可以通過屬性名指定需要放到會話中的屬性外,還可以通過模型屬性的對象類型指定哪些模型屬性需要放到會話中
例如:
①???? @SessionAttributes(types=User.class) 會將隱含模型中所有類型為 User.class 的屬性添加到會話中。
②???? @SessionAttributes(value={“user1”, “user2”})
③???? @SessionAttributes(types={User.class, Dept.class})
④???? @SessionAttributes(value={“user1”, “user2”}, types={Dept.class})?
?