1. 程式人生 > >Spring中Model,ModelMap以及ModelAndView之間的區別

Spring中Model,ModelMap以及ModelAndView之間的區別

fontsize port 自動生成 分享圖片 lang ng- 引擎 用法 ttr

原文鏈接:http://blog.csdn.net/zhangxing52077/article/details/75193948

Spring中Model,ModelMap以及ModelAndView之間的區別

標簽: modelMapmodelModelAndView 技術分享圖片 分類:

目錄(?)[+]

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

Spring中Model,ModelMap以及ModelAndView之間的區別