我目前正在阅读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的定义"
答案 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;
}