日期:2014-05-16  浏览次数:20661 次

Spring mvc3.0 Ajax 整合

spring在解析视图的时候有两个重要的接口:ViewResolver?和?View
ViewResolver 中只有一个方法 resolveViewName ,提供 view name 和 实际 view的映射;
View 中两个方法 getContentType 和 render ,解析请求中的参数并把这个请求处理成某一种 View.

说白了,就是ViewResolver 负责怎么去解析, 而View只代表一种 视图层的技术。

对于一个请求,应该返回什么样的视图是 ViewResolver 来决定的,spring3.0提供的 ViewResolver 包括 AbstractCachingViewResolver,XmlViewResolver,ResourceBundleViewResolver,UrlBasedViewResolver,InternalResourceViewResolver,VelocityViewResolver/FreeMarkerViewResolver,ContentNegotiatingViewResolver等。从字面意思我们大致就可以猜出起用途。
我们平时使用ResourceBundleViewResolver或者InternalResourceViewResolver来返回JSP页面,他们就是其中的两个 ViewResolver?

下面我主要说说ContentNegotiatingViewResolver?
根据官方文档:The ContentNegotiatingViewResolver does not resolve views itself but rather delegates to other view resolvers,就是说ContentNegotiatingViewResolver 本身并不自己去解析,他只是分配给其他的ViewResolver 去解析。并选择一个看起来像是客户端请求需要返回的一种? View? 返回。


下面来看看我们想要返回的JSON格式的数据,spring3.0中提供了一种View 来支持 JSON,MappingJacksonJsonView ?,在这个View中我们可以封装数据,属性等等,但是怎么让spring返回这个view呢,还是要通过 ViewResolver 来处理。


我们来看官方文档里的一份关于ContentNegotiatingViewResolver??的典型配置:

Java代码??收藏代码
  1. <bean?class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">??
  2. ??<property?name="mediaTypes">??
  3. ????<map>??
  4. ??????<entry?key="atom"?value="application/atom+xml"/>??