1.場景分析
在許多實際項目需求中,后台要從控制層直接返回前端所需的數據,這時Model大家族就派上用場了。
2.三者區別
①Model
Model是一個接口,它的實現類為ExtendedModelMap,繼承ModelMap類
public class ExtendedModelMap extends ModelMap implements Model
- 1
②ModelMap
ModelMap繼承LinkedHashMap,spring框架自動創建實例並作為controller的入參,用戶無需自己創建
public class ModelMap extends LinkedHashMap<String,Object>
- 1
③ModelAndView
顧名思義,ModelAndView指模型和視圖的集合,既包含模型 又包含視圖;ModelAndView的實例是開發者自己手動創建的,這也是和ModelMap主要不同點之一;
3.實例說明
准備工作:springboot工程集成了velocity模版引擎,暫不會的伙伴看看筆者velocity集成的博客:http://blog.csdn.net/zhangxing52077/article/details/73194948,恕不贅述。
①Model的用法
spring自動為Model創建實例,並作為controller的入參
@RequestMapping("hello") public String testVelocity(Model model,String name){ model.addAttribute("name",name); return "hello"; }
測試效果:
②Model與model用法差不多
@RequestMapping("hello") public String testVelocity(ModelMap model,String name){ model.addAttribute("name",name); return "hello"; }
這里效果跟Model運行效果一樣
③ModelAndView的用法
@RequestMapping("model") public ModelAndView testModel(String name) { //構建ModelAndView實例,並設置跳轉地址 ModelAndView view = new ModelAndView("test"); //將數據放置到ModelAndView對象view中,第二個參數可以是任何java類型 view.addObject("name",name); //返回ModelAndView對象view return view; }
設置view跳轉地址
ModelAndView view = new ModelAndView("test");
當然還可以這樣設置跳轉地址
ModelAndView view = new ModelAndView(); view.setViewName("test");
其中的test表示templates中的test.html,springboot默認的模版文件一般都在resources/templates下
設置view的model
view.addObject("name","zhangxing,hello");
運行效果:
這樣既跳轉了前端頁面,又把值傳過來了,一石二鳥!好了,我是張星,歡迎加入博主技術交流群,群號:313145288