SpringMVC可用的ViewResolver实现类

为了便于理解,我们可以将Spring MVC提供的ViewResolver划分为两类,一类称为"面向单一视图类型的ViewResolver,另一类则称为面向多视图类型的ViewResolver。下面是这两类ViewResolver的详细情况。

1. 面向单一视图类型的ViewResolver

该类别ViewResolver的正宗名称应该是UrlBasedViewResolver(它们都直接地或者间接地继承自该类)。使用该类别的ViewResolver,我们不需要为它们配置具体的逻辑视图名到具体View的映射关系。通常只要指定一下视图模板所在的位置,这些ViewResolver就会按照逻辑视图名,抓取相应的模板文件、构造对应的View实例并返回。之所以又将它们称之为面向单一视图类型的ViewResolver,是因为该类别中,每个具体的ViewResolver实现都只负责一种View类型的映射,ViewResolver与View之间的关系是一比一。比如,我们之前一直使用的InternalResourceViewResolver,它通常就只负责到指定位置抓取JSP模板文件,并构造InternalResourceView类型的View实例并返回。而VelocityViewResolver则只关心指定位置的Velocity模板文件(.vm),并会将逻辑视图名映射到视图模板的文件名,然后构造VelocityView类型的View实例返回,诸如此类。

属于该类别的主要ViewResolver实现类为如下几个。

InternalResourceViewResolver。它是我们使用最多的ViewResolver实现类型,它对应InternalResourceView 视图类型的映射,说白了也就是处理JSP模板类型的视图映射。如果DispatcherServlet在初始化的时候,不能在自己的WebApplicationContext中找到至少一个ViewResolver,那么,InternalResourceViewResolver将作为默认的ViewResolver被使用。

FreeMarkerViewResolver/VelocityViewResolver。FreeMarkerViewResolver和Velo- cityViewResolver分别负责对应FreeMarkerView和VelocityView类型视图的查找工作,它们将根据逻辑视图名到指定的位置获取对应的模板文件,并构造FreeMarkerView和VelocityView的实例返回给DispatcherServlet使用。

JasperReportsViewResolver。JasperReportsViewResolver只关心根据逻辑视图名到指定位置查找JasperReport类型模板文件,并返回AbstractJasperReportsView的具体子类型View实例,例如JasperReportsCsvView或者JasperReportsHtmlView等。

XsltViewResolver。只负责根据逻辑视图名查找并返回XsltView类型的View实例。

启用以上这些ViewResolver,与使用InternalResourceViewResolver一样简单。最基本的方法是,使用prefix属性指定模板所在路径,使用suffix属性指定模板文件的后缀名。这样,在获取逻辑视图名之后,相应的ViewResolver内部就能够根据[prefix]+viewName+[suffix]这样的URL找到对应的模板文件,并构造对应的View实例而返回了。以VelocityViewResolver的使用为例,至于其他的几个ViewResolver的使用,你基本上就可以"举一反三"了,更加详尽的配置项,可以参考对应类的Javadoc或者Professional Java Development with the Spring Framework一书中对应视图章节的介绍内容。下面给出了针对VelocityViewResolver的配置代码示例:

[html]  view plain copy
  1. <bean id="viewResolver"  
  2.           class="org.springframework.Web.servlet.view.velocity.VelocityViewResolver">    
  3.      <property name="prefix" value="../velocity/"/>    
  4.      <property name="suffix" value=".vm"/>    
  5. </bean>   

现在DispatcherServlet对视图的请求将会由VelocityViewResolver接管,Velocity- ViewResolver将根据传入的逻辑视图名,到指定目录下查找.vm类型的Velocity模板文件,并构造VelocityView实例返回给DispatcherServlet使用。就跟我们所说的那样,它只负责到指定位置查找对应Velocity的单一视图类型,而不会返回其他,比如Freemarker视图对应的View实例。

注意 关于使用Velocity作为视图技术需要附加的配置内容,可以参考稍后ResourceBundle- ViewResolver部分的附带信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值