前言
用過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
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
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
閱讀更多 java執行官 的文章