SpringMVC裡的Model、Map、ModelMap以及ModelAndView
阿新 • • 發佈:2018-11-10
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例項。