MVC设计模式是发送请求到目标处理器,处理器去调动方法,业务可能会有返回值(包括对象,集合)转发到页面显示。这就出现问题:如何把模型数据放入域对象。
. SpringMVC提供了一下几种途径输出模型数据:
——ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型对象。
——Map和Model:入参为org.springframework.ui.Model, org.springframework.ui.ModelMap或java.uti.Map时,处理方法返回时,Map中的数据会自动添加到模型中
——@SessionAttributes: 将模型中的某个属性暂存到HttpSession中,以便多个请求之间共享这个属性。
——@ModelAttribute: 方法入参标注该注解后,入参的对象就会放到数据模型中。
. 控制器处理方法的返回值如果为ModelAndView,则其既包括视图信息,有包含模型数据信息。
. 添加模型数据:
——ModelAndView addObject(String attributeName,Object attribute)
——ModelAndView addAllObject(Map<String,?> modelMap)
. 设置视图
——void setView(View view)
——void setViewName(String viewName)
实例:
index.jsp
<a href="springmvc/testModelAndView">Test ModelAndView</a>
SpringMVCTest.java
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView() {
String viewName = SUCCESS;
ModelAndView modelandview = new ModelAndView(viewName);
//添加模型数据到ModelAndView中
modelandview.addObject("time",new Date());
return modelandview;
}
success.jsp
time: ${requestScope.time }
注意到一点就是web.xml的拦截器配置不能把ModelAndView拦截配置方式:
web.xml
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<url-pattern>/</url-pattern>不能写成<url-pattern>*/<url-pattern>