我在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>
答案 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
界面订购它们。让您的类实现该接口并返回适当的值。