XmlViewResolver类详解 - ViewResolver系列三

XmlViewResolver是XML视图解析器,它实现了ViewResolver接口,接受相同DTD定义的XML配置文件作为Spring的XML bean工厂。它继承自AbstractCachingViewResolver抽象类,所以它也是支持视图缓存的。通俗来说就是通过xml指定逻辑名称与真实视图间的关系,它从XML配置文件中查找视图实现(默认 XML 配置文件为 /WEB-INF/views.xml)。

使用方法

配置视图解析器

<bean id="viewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
    <property name="location" value="/WEB-INF/views.xml"></property> 
</bean>

配置视图配置文件views.xml里各项的配置

<bean id="parent-view" class="org.springframework.web.servlet.view.JstlView">
 <property name="attributes">
   <props>   <prop key="title">FlightDeals.com</prop>  <prop key="season">Summer</prop>
  </props>
</property>
<property name="url" value="/index.jsp"></property>
</bean>

<bean id="home" parent="parent-view">
   <property name="url" value="/WEB-INF/jsp/home.jsp"/>
</bean>

<bean id="listFlight" parent="parent-view">
   <property name="url" value="/WEB-INF/jsp/listFlights.jsp"/>
</bean>

例子

(1)在SpringMVC的配置文件中加入XmlViewResolver的bean定义。使用location属性指定其配置文件所在的位置,order属性指定当有多个ViewResolver的时候其处理视图的优先级。

<bean class="org.springframework.web.servlet.view.XmlViewResolver">    
    <property name="location" value="/WEB-INF/views.xml"/>    
    <property name="order" value="1"/>    
</bean>

(2)在XmlViewResolver对应的配置文件中配置好所需要的视图定义。在下面的代码中我们就配置了一个名为internalResource的InternalResourceView,其url属性为“/index.jsp”。

<?xml version="1.0" encoding="UTF-8"?>    
    <beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    
    <bean id="internalResource" class="org.springframework.web.servlet.view.InternalResourceView">    
        <property name="url" value="/index.jsp"/>    
    </bean>    
</beans>

(3)定义一个返回的逻辑视图名称为在XmlViewResolver配置文件中定义的视图名称——internalResource。

@RequestMapping("/xmlViewResolver")    
public String testXmlViewResolver() {    
    return "internalResource";    
}

(4)这样当我们访问到上面定义好的testXmlViewResolver处理器方法的时候返回的逻辑视图名称为“internalResource”,这时候Spring就会到定义好的views.xml中寻找id或name为“internalResource”的bean对象予以返回,这里Spring找到的是一个url为“/index.jsp”的InternalResourceView对象。


XmlViewResolver继承自AbstractCachingViewResolver抽象类,所以它也是支持视图缓存的。XmlViewResolver需要给定一个xml配置文件,该文件将使用和Spring的bean工厂配置文件一样的DTD定义,所以其实该文件就是用来定义视图的bean对象的。在该文件中定义的每一个视图的bean对象都给定一个名字,然后XmlViewResolver将根据Controller处理器方法返回的逻辑视图名称到XmlViewResolver指定的配置文件中寻找对应名称的视图bean用于处理视图。该配置文件默认是/WEB-INF/views.xml文件,如果不使用默认值的时候可以在XmlViewResolver的location属性中指定它的位置。XmlViewResolver还实现了Ordered接口,因此我们可以通过其order属性来指定在ViewResolver链中它所处的位置,order的值越小优先级越高。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。