Model和ModelAndView這兩個類在spring的視圖解析時作用及區別
1、Model是用來傳輸數據的,不會進行業務的尋址
2、ModelAndView可以進行業務尋址(就是設置對應的要請求的靜態文件,靜態文件類似於jsp文件)
最大的區別:Model每一次請求可以自動創建,ModelAndView是需要我們自己去new的
Model方法
如果在控制層上的方法聲明了注解@ResponseBody,則會直接將返回值輸出到頁面,Model是一個接口,實現類為ExtendModelMap,繼承了ModelMap類。
public class ExtendModelMap extends ModelMap implements Model
model可以用來接收各種類型的數據,如果用來接收一組數據list,那么這個時候的model實際上是ModelMap
ModelMap方法
ModelMap對象主要用於傳遞控制方法處理數據到結果頁面(也就是把結果頁面上需要的數據放到ModelMap對象中就可以了)
作用類似於request對象的setAttribute方法的作用:在一個請求過程中傳遞處理的數據
ModelMap本身不能設置頁面跳轉的URL地址名或者物理跳轉地址,此時可以通過控制器方法的字符串返回值來設置跳轉URL地址別名或者物理跳轉地址
ModelAndView方法
添加模型數據用addObject;
設置視圖setViewName;
ModelAndView 對象有兩個作用:
(1)設置轉向地址,這也是ModelAndView和ModelMap的主要區別.設置方式如下所示:
ModelAndView view = new ModelAndView("path:student");
或者通過setViewName方式:
public void setViewName(String viewName){...}
(2)將控制器方法中處理的結果數據傳遞到結果頁面(也就是把在結果頁面上需要的數據放到ModelAndView對象中即可)
其作用類似於request對象的setAttribute方法的作用,用來在一個請求過程中傳遞處理的數據。通過以下方法向頁面傳遞參數:
public ModelAndView addObject(String attributeName, Object attributeValue){...}
public ModelAndView addObject(Object attributeValue){...}
在jsp中:也是可以通過el表達式語言attributeName或者C標簽庫的{name } 來獲取並展示ModelAndView中的數據。
ModelAndView的實例是需要我們手動new的,這也是和ModelMap的一個區別。
而且,ModelAndView 可以自己尋址,只需要return 返回其對象即可。
記住有一個需要返回對象,一個需要返回的是地址路徑。
