spring如何知道使用哪个视图解析器?

时间:2014-07-07 08:24:30

标签: java spring spring-mvc

我目前正在阅读Spring in Action,我正在尝试在春季配置一个视图解析器,但本书并没有说" Spring如何选择使用哪个View Resolver"它描述了配置InternalResourceViewResolver以及如何添加前缀和后缀。但是,我无法找到Spring如何选择使用哪个Resolver。什么告诉春天哪个解析器使用?

编辑: 从这本书中引用:

""这里缺少的是Spring如何了解Tiles定义。 Tiles-本身 ViewResolver对任何Tiles定义都不了解,而是依赖于 TilesConfigurer用于跟踪该信息。所以我们需要添加一个Tiles- 配置bean到spitter-servlet.xml: /WEB-INF/viewsviews.xml  ""

这本书从未回答过它提出的问题:" Spring如何知道Tiles的定义"

5 个答案:

答案 0 :(得分:3)

查看属性“订单”。但要记住:“只有一个InternalResourceViewResolver可以存在于背景中,没有更多”

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="1" />
        <property name="prefix" value="${view.prefix}" />
        <property name="suffix" value="${view.suffix}" />
        <property name="cache" value="true" />
</bean>

答案 1 :(得分:1)

视图解析器实现 org.springframework.core.Ordered 接口,spring将根据此接口命令解析器。

PS:来自tiles2或tiles3包的TilesViewResolver扩展为UrlBasedViewResolver

答案 2 :(得分:1)

TilesViewResolver是Apache Tiles的特定ViewResolver,恰好需要额外的配置才能执行它的操作。

它需要的额外信息是TilesConfigurer。该bean包含有关Tiles定义的信息,可以配置为例如:

<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/viewsviews.xml</value>
        </list>
    </property>
</bean>

正如documentation的第16.5.2节所述:

  

Spring支持多个视图解析器。因此,您可以链接解析器   例如,在某些情况下覆盖特定视图。   您可以通过向您的帐户添加多个解析程序来链接视图解析程序   应用程序上下文,如有必要,可以通过设置order属性   指定排序。请记住,订单属性越高,   之后视图解析器位于链中。

答案 3 :(得分:0)

这是定义 ViewResolver

的正确方法
<bean id="viewResolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

如果您未在应用程序上下文中声明任何ViewResolver实现,则Springs默认为您注册一个。 默认为自动注册的 InternalResourceViewResolver

如果声明自己的视图解析器,则不会使用默认的 InternalResourceViewResolver 。如果有多个视图解析器,则将按顺序查询它们,直到其中一个返回视图对象。

答案 4 :(得分:0)

InternalResourceViewResolver 类继承自 UrlBasedViewResolver ,您可以在其中找到此内容。为视图解析程序定义bean后,您的视图解析程序会映射您的URL,以便进一步处理查看请求

   public void setAttributesMap(Map<String, ?> attributes) {
        if (attributes != null) {
            this.staticAttributes.putAll(attributes);
        }
    }
public Map<String, Object> getAttributesMap() {
        return this.staticAttributes;
}