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

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

概述

隨著SSM框架的流行開展,肯定會涉及到SpringMVC.

表現層的設計一般都使用 MVC 模型。( MVC 是表現層的設計模型,和其他層沒有關係)

  1. 獲取請求資料

  2. 呼叫service

3.根據servic返回結果,響應返回資料

下面來說說Model,ModelMap,以及ModelAndView之間的區別

Model

Model是一個介面,實現類為ExtendedModeMap,繼承ModeMap類

public class ExtendedModeMap extends ModelMap implements Model

ModelMap

ModelMap繼承LinkedHashMap

public class ModelMap extends LinkedHashMap<String,Object>

Model和ModelMap的區別

作用:
 通過Model與ModelMap可以往request域中儲存資料。
 Model與ModelMap作為控制器方法的引數。
 
 共同:
 1.Model與ModelMap例項都是springMVC自動建立並作為控制器方法引數傳入,無需使用者建立,且要return指定返回的頁面路徑.
 2.檢視原始碼分析底層原理,實際上Model與ModelMap都是通過ExtendedModeMap的子類BindingAwareModeMap實現
 
 區別:
 一般來說,可以用Model來接收各種型別的資料,如果接收一組或多個則實際上是ModelMap.
     
 注意:

1. 通過@SessionAttributes 註解可以自動把Model或者ModelMap中的資料放入session。
2. 在頁面上可以通過el表示式獲取域中的資料.

Model的用法

   // Model 作為方法引數
    @RequestMapping("/model")
    public String model(Model model){
        model.addAttribute("cn","China");
        return "success";
    }

ModelMap的用法

// ModelMap 作為方法引數
    @RequestMapping("/modelMap")
    public String modelMap(ModelMap modelMap){
        modelMap.addAttribute("usa","American");
        return "success";
    }

ModelAndView

ModelAndView 是 SpringMVC 為我們提供的一個物件,該物件也可以用作控制器方法的返回值。

該物件中有兩個方法ModelAndView返回結果時候,既可以返回資料(Model),也可以指定跳轉結果頁面(view).

ModelAndView的用法

@RequestMapping("/mv")
    public ModelAndView mv(){
        // 返回結果
        ModelAndView mv = new ModelAndView();
        // 設定跳轉的頁面名稱
        mv.setViewName("success");
        // 資料儲存到域
        mv.addObject("cn","China");
        return mv;
    }

ModelAndView和Model的區別

ModelAndView是方法返回值,例項是使用者手動建立.
Model是方法引數,例項是springMVC自動建立並作為控制器方法引數傳入,無需使用者建立.
Model和ModelMap返回的是頁面的指定路徑,ModelAndView返回的是物件.

 

個人座右銘:

把簡單的事做好,就是不簡單.堅持努力是自信的源頭!!!