我在 Spring 配置中有多个 View 解析器,并希望对不同的请求使用不同的 View 解析器。
示例:对于以 report_*
开头的 URL,使用 Birt View 解析器,对于 ajax 调用使用 Tiles 解析器等。
尝试设置 order 属性,但所有 View 都由 tilesViewResolver
解析。
<beans:bean id="tilesViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver">
<beans:property name="viewClass" value="com.example.example.util.AjaxTiles21View"/>
</beans:bean>
<beans:bean id="birtViewResolver" class="org.eclipse.birt.spring.core.BirtViewResolver">
...
<beans:property name="order" value="2" />
</beans:bean>
<beans:bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="1" />
</beans:bean>
最佳答案
你绝对可以。 ViewResolver
有一个方法,resolveViewName(String)
返回
the View object, or null if not found (optional, to allow for ViewResolver chaining)
您的 ViewResolver
bean 已注册。当处理程序返回 View 名称时,Spring 将遍历每个 ViewResolver
,并使用给定名称调用它们的 resolveViewName
方法。如果该方法返回非-null
,则使用该View
。如果返回null
,则继续迭代。
所以如果 Spring 要跳过它,实现必须返回 null
。
有些实现永远不会返回 null
。您的自定义 ViewResolver
类似乎就是这种情况。如果ViewResolver
返回一个View
,即使那个View
最终会渲染失败,Spring也会使用它。
您要么需要解决这个问题,要么订购 ViewResolver
bean。例如,您可以使用 Ordered
界面对它们进行排序。让您的类实现该接口(interface)并返回适当的值。
关于java - 是否可以使用不同的 View 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091791/