springmvc-Model和ModelAndView的區別

前言

用過springMvc的小夥伴都知道,一般而言我們返回頁面視圖的時候會有兩種可能,就是本文題目中的兩個類。其實本文就是想要對比一下這兩個類在spring的視圖解析中的作用以及區別。

區別

就我個人而言,我自己覺得這兩者之間是沒有什麼區別的?實際上,這兩者之間有著很大的區別,具體就表現在Model只是用來傳輸數據的,並不會進行業務的尋址。但是,ModelAndView卻是可以進行業務尋址的,就是設置對應的要請求的靜態文件,這裡的靜態文件指的是類似jsp的文件。當然,兩者還有一個最大的區別,那就是Model是每一次請求都必須會帶著的,但是ModelAndView是需要我們自己去新建的。

代碼示例

首先是Model傳遞數據。

@Controller

public class FreemarkerController {

@SuppressWarnings("unchecked")

@RequestMapping(method = RequestMethod.POST, value = "/freemarker")

public String getFtl(Model model) {

// 構造填充數據的Map

Map map = new HashMap();

List testVos = new ArrayList<>();

TestVo testVo = new TestVo();

testVo.setName("fulei");

TestVo testVo1 = new TestVo();

testVo1.setName("wangmeng");

testVos.add(testVo);

testVos.add(testVo1);

map.put("user", "love");

map.put("url", "http://www.baidu.com/");

map.put("name", "百度");

map.put("testVos", testVos);

model.addAllAttributes(map);

return "test";

}

}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

其次就是ModelAndView。

@RequestMapping(method = RequestMethod.POST, value = "/freemarker")

public ModelAndView getFtlByModelAndView() {

ModelAndView modelAndView = new ModelAndView();

// 構造填充數據的Map

Map map = new HashMap();

List testVos = new ArrayList<>();

TestVo testVo = new TestVo();

testVo.setName("fulei");

TestVo testVo1 = new TestVo();

testVo1.setName("wangmeng");

testVos.add(testVo);

testVos.add(testVo1);

map.put("user", "love");

map.put("url", "http://www.baidu.com/");

map.put("name", "百度");

map.put("testVos", testVos);

modelAndView.setViewName("xx/xx")

modelAndView.addAllObjects(map);

return modelAndView;

}

從上面我們可以看得出來這兩個之間還是有一定的區別的,當然具體的區別也就如我上面所描述的那樣了。

總結

這篇博文主要是討論下這個看似不會有坑的地方的一些小問題,算是對今天做的東西的一個總結吧。有時間的話,再詳細得談談在這邊遇到的問題。

文章來自https://blog.csdn.net/wangmeng951011/article/details/53121483


分享到:


相關文章: