SpringMVC裡的Model、Map、ModelMap以及ModelAndView
首先理解,model從哪裡來?
SpringMVC內部使用一個org.springframework.ui.Model介面儲存的資料模型,它的功能類似於Java.uitl.Map,但是比Map更好用 org.springframework.ui.ModelMap實現Map介面。
SpringMVC在呼叫方法前會建立一個隱含的資料模型,作為模型資料的儲存容器, 成為”隱含模型”。
如果處理方法入參為Map或者Model型別,SpringMVC會將隱含模型的引用傳遞給這些入參。
spring Web MVC 提供Model、Map或ModelMap讓我們能去暴露渲染檢視需要的模型資料。
@RequestMapping(value = "/model")
public String createUser(Model model, Map model2, ModelMap model3) {
model.addAttribute("a", "a");
model2.put("b", "b");
model3.put("c", "c");
System.out.println(model == model2);
System.out.println(model2 == model3);
return "success";}
雖然此處注入的是三個不同的型別(Model model, Map model2, ModelMap model3),但三者是同一個物件。
AnnotationMethodHandlerAdapter和RequestMappingHandlerAdapter將使用BindingAwareModelMap作為模型物件的實現,即此處我們的形參(Model model, Map model2, ModelMap model3)都是同一個BindingAwareModelMap例項。
另外關於Model和ModelAndView
@RequestMapping(value = "/mergeModel")
public ModelAndView mergeModel(Model model) {
model.addAttribute("a", "a");//①新增模型資料
ModelAndView mv = new ModelAndView("success");
mv.addObject("a", "update");//②在檢視渲染之前更新③處同名模型資料
model.addAttribute("a", "new");//③修改①處同名模型資料
//檢視頁面的a將顯示為"update" 而不是"new"
return mv;
}
從程式碼中我們可以總結出功能處理方法的返回值中的模型資料(如ModelAndView)會 合併 功能處理方法形式引數中的模型資料(如Model),但如果兩者之間有同名的,返回值中的模型資料會覆蓋形式引數中的模型資料。
在處理方法的方法體中,可以使用如下方法新增資料模型:
[ModelAndView]
addObject(String attributeName,Object attributeValue);
addAllObject(Map<String,?> modelMap);
[Model]
model.addAttribute("person", person)
[Map]
put(String attributeName,Object attributeValue);
Tips:
放到Map中的資料如何傳值到前臺,以及前臺如何取值?
ModelMap物件主要用於傳遞控制方法處理資料到結果頁面,也就是說我們把結果頁面上需要的資料放到ModelMap物件中即可,他的作用類似於request物件的setAttribute方法的作用,用來在一個請求過程中傳遞處理的資料。
① 通過以下方法向頁面傳遞引數:
addAttribute(String key,Object value);
② JSP頁面取值:
${requestScope.key} 。
轉自:http://blog.csdn.net/J080624/article/details/52817498?locationNum=2&fps=1
相關文章
- 架構師學習-springmvc-ModelMap、Model、Map(四十六)架構SpringMVC
- ModelAndView 配置與使用View
- 【SpringMVC】RESTFul簡介以及案例實現SpringMVCREST
- SpringMVC何時載入的controller裡的mapping方法SpringMVCControllerAPP
- 深入學習SpringMVC以及學習總結SpringMVC
- SAP Gateway Service Builder 裡的 OData Model 定義方式GatewayUI
- 【Map】Echarts之iphone銷量地圖的使用以及詳細配置EchartsiPhone地圖
- SpringMvc - SpringMvc的執行流程SpringMVC
- 【論文閱讀】CVPR2021: MP3: A Unified Model to Map, Perceive, Predict and PlanNifi
- 手寫 p-map(控制併發數以及迭代處理 promise 的庫)Promise
- 解說pytorch中的model=model.to(device)PyTorchdev
- springmvc高可用響應物件以及全域性異常處理類的編寫SpringMVC物件
- machine learning model(algorithm model) .vs. statistical modelMacGo
- springMvc的核心SpringMVC
- java的各種集合為什麼不安全(List、Set、Map)以及代替方案Java
- [提問交流]新手求助啊get_document_model方法在哪裡定義的?
- 【SpringMVC】SpringMVC搭建框架SpringMVC框架
- springboot中擴充套件ModelAndView實現asp.net core mvc的ActionResult效果Spring Boot套件ViewASP.NETMVC
- Laravel中的ModelLaravel
- Django的User ModelDjango
- SpringMVC原始碼之Handler註冊、獲取以及請求controller中方法SpringMVC原始碼Controller
- SpringMVC的主幹SpringMVC
- Map集合&&Map集合的不同遍歷【keySet()&&entrySet()】
- Java集合中List,Set以及Map等集合體系詳解(史上最全)Java
- SpringMVC(一)SpringMVC的處理流程、元件說明、搭建SpringMVC元件
- 聊聊MVX中的Model
- 逆向 Model 的 Composer 包
- Laravel Model的$casts使用LaravelAST
- Django的User Model(2)Django
- SAP CRM產品主資料應用裡value node和model node的轉換
- Go中的MapGo
- SpringMVC---IDEA 搭建SpringMVC工程SpringMVCIdea
- SpringMVCSpringMVC
- 探索SpringBoot中的SpringMVCSpring BootSpringMVC
- SpringMvc的Controller singleton synchronizedSpringMVCControllersynchronized
- SpringMVC的下載功能SpringMVC
- SpringMvc的常用註解SpringMVC
- Java裡連線字串的幾種方式以及優缺點Java字串
- SpringMVC原始碼分析1:SpringMVC概述SpringMVC原始碼