是否可以使用不同的视图解析器?

时间:2014-08-02 04:53:06

标签: java spring-mvc birt

我在Spring配置中有多个视图解析器,并希望为不同的请求使用不同的视图解析器。

示例:对于以report_*开头的网址,请使用Birt视图解析程序,对于ajax调用,请使用Tiles解析程序,依此类推。

尝试设置订单属性,但所有视图均由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>

1 个答案:

答案 0 :(得分:41)

你绝对可以。 ViewResolver只有一个方法,resolveViewName(String)会返回

  

View对象,如果找不到 null (可选,允许ViewResolver链接)

您的ViewResolver bean已注册。当处理程序返回视图名称时,Spring将遍历每个ViewResolver,并使用给定名称调用其resolveViewName方法。如果方法返回非-null,则使用View。如果返回null,则继续迭代。

因此,如果Spring要跳过它,则实现必须返回null

有些实现永远不会返回null。您的自定义ViewResolver类似乎就是这种情况。如果ViewResolver返回View,即使最终无法呈现View,Spring也会使用它。

您需要修复它或订购ViewResolver bean。例如,您可以使用Ordered界面订购它们。让您的类实现该接口并返回适当的值。