我们知道,,很多时候我们在业务方法可能会有返回数据,常常是一些对象,那么我们怎么把模型数据输出到我们需要它显示的页面上呢?通常 我们都把模型数据放在域对象里,一般都是在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)
方便的构造函数来取一个模型对象