码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC:Model、View、ModelAndView

时间:2015-04-18 23:25:37      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

个人理解:View为服务器上的某个文件容器,可以为JSP,FTL等动态页面文件,甚至是媒体文件等等,单单是一个文件。Model的作用是存储动态页面属性,动态页面文件即View可以在Model中获取动态数据,这样就实现了View和Model分离的目的。接下来分别对这三个做一下说明。

一、首先是View:View接口在org.springframework.web.servlet.View包内。核心方法:

1、getContentType()获取当前view的ContentType(),同http请求中的ContenType()是一样的作用。

2、render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)。

  render(使成为;递交;给予;表达;渲染)Dispatcher(发报机; 收发; 调度;调度员 )

  根据参数就可以知道,这个是为视图绑定Request,Response和Model的方法。

3、View的一个实现类AbstractView,其中有方法:

(s&g)BeanName(String beanName)

  (s&g)ContentType(String contentType)

  (s&g)RequestContextAttribute(String requestContextAttribute)

  setAttributesCSV(String propString)

  setAttributes(java.util.Properties attributes)

  (s&g)AttributesMap(Map<String, ?> attributes) 

  addStaticAttribute(String name, Object value)

  Map<String, Object> getStaticAttributes()

  (s&i)ExposePathVariables(boolean exposePathVariables)

  Map<String, Object> createMergedOutputModel(Map<String, ?> model, HttpServletRequest request,HttpServletResponse response)

  RequestContext createRequestContext(HttpServletRequest request, HttpServletResponse response, Map<String, Object> model)

  renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)

  exposeModelAsRequestAttributes(Map<String, Object> model, HttpServletRequest request)

  writeToResponse(HttpServletResponse response, ByteArrayOutputStream baos)
  setResponseContentType(HttpServletRequest request, HttpServletResponse response)

  其中后面的是与组合Model和Response的方法。

  根据源码可知,View其中的staticAttributes其实最终还是给了Model,通过mergedModel.putAll(pathVars);

 二、model,model相对简单,就是一些属性的键值对而已。merge(融合,整合)

  1、方法有:

  Model addAttribute(String attributeName, Object attributeValue);  

  Model addAttribute(Object attributeValue);

  Model addAllAttributes(Collection<?> attributeValues);

  Model addAllAttributes(Map<String, ?> attributes);

  Model mergeAttributes(Map<String, ?> attributes);

  boolean containsAttribute(String attributeName);

  Map<String, Object> asMap();

  其中只加值的时候,属性名通过org.springframework.core.Conventions的getVariableName生成。

  该接口的实现类为ExtendedModelMap,特殊的,ExtendedModelMap继承了ModelMap类,而ModelMap其实是继承了LinkedHashMap<String, Object>类。

  ExtendedModelMap的所有方法,都在ModelMap中实现了。

  2、Model有个子接口RedirectAttributes,用于设置重定向的属性。比Model里面多了一个Model,RedirectAttributes中其实是有两个Map的。

  RedirectAttributes addFlashAttribute(String attributeName, Object attributeValue);

  RedirectAttributes addFlashAttribute(Object attributeValue);

  Map<String, ?> getFlashAttributes();

  他的实现类为RedirectAttributesModelMap,同样继承自ModelMap,内部成员有DataBinder数据用于数据绑定,flashAttributes则是另一个Map,保存着重定向的属性。

  该类构造时直接传入一个数据绑定器,可为null,RedirectAttributesModelMap(org.springframework.validation.DataBinderdataBinder)

  转发与重定向区别可参考(http://www.cnblogs.com/shenliang123/archive/2011/10/27/2226892.html)

Spring MVC:Model、View、ModelAndView

标签:

原文地址:http://www.cnblogs.com/guangshan/p/4438130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!