我們知道,,很多時候我們在業務方法可能會有返回數據,常常是一些對象,那麼我們怎麼把模型數據輸出到我們需要它顯示的頁面上呢?通常 我們都把模型數據放在域對象裏,一般都是在request域裏面。那麼在這裏springmvc提供了幾種途徑來輸出模型數據:
1.ModelAndView:簡單理解來說,它只作爲返回值,包括視圖信息+模型數據。springmvc會把modelandview的model中的數據放入到request域對象中。
2.Map及Model:作爲參數或返回值。
3.@sessionAttributes:我們把所要返回的信息暫存到HttpSession中
4.@ModelAttributes:
那麼我們首先來看看ModelAndView:
modelAndView有
在index.jsp中寫一個超鏈接
<a href="testModelAndView">TestModelAndView</a>
在控制器中寫這樣的一個方法:
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndVIew(){
ModelAndView mav=new ModelAndView("success");
mav.addObject("name", "name:hxl");
System.out.println(mav);
return mav;
}
那我們現在來看看結果:
這裏我們選擇的ModelAndView的其中一種method,其實它還有很多方法,可以查閱資料,這裏我只展示常用的三種:
除此之外,我們還需要注意的一點是ModelAndView有七個構造方法,在構建ModelAndView對象的時候,我們可以根據返回值的類型來做合適的選擇,下面分析一下:
1.無參構造參數ModelAndView(),當你只有一個模型屬性要返回時,可採用這種構造器,然後在相應的視圖中可以使用el表達式讀出模型數據。
public ModelAndView login(){
ModelAndView mav=new ModelAndView();
mav.setViewName("success");//返回的文件名,即返回jsp的名字
mav.addObject("time",new Date);
}
2.ModelAndView(String viewName):不用modelandview的setViewName方法而是直接在形參中
3.ModelAndView(String viewName,
Map model)
4.ModelAndView(String viewName,String modelName,object modelObject)
這一種構造方法直接把返回的文件名寫在方法的形參中,比前倆種都更加簡潔
public ModelAndView login(){
ModelAndView mav=new ModelAndView("success","time",new Date());
return mav;
}
5.ModelAndView(Object view):這種一般都是沒有模型數據暴露時,方便的構造函數
6.ModelAndView(Object view, Map model)
給出一個view對戲和一個模型,創建一個新的modelandview
7.ModelAndView(Object view, String modelName, Object modelObject)
方便的構造函數來取一個模型對象