是否有可能使用不同的视图parsing器?
我有一个Springconfiguration中的多个视图parsing器,并希望对不同的请求使用不同的视图parsing器。
例如:对于以report_*
开头的URL,使用Birt视图parsing器,对于Ajax调用使用Tilesparsing器等等。
尝试设置顺序属性,但所有的意见由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)
返回
View对象; 如果没有find ,则返回null (可选,以允许ViewResolver链接)
您的ViewResolver
bean已注册。 当处理程序返回视图名称时,Spring将遍历每个ViewResolver
,并使用给定的名称调用它们的resolveViewName
方法。 如果该方法返回非-null
,则使用该View
。 如果返回null
,则继续迭代。
所以如果Spring跳过它,那么实现必须返回null
。
有一些从不返回null
。 这似乎是您的自定义ViewResolver
类的情况。 如果ViewResolver
返回一个View
,即使这个View
最终会失败,Spring也会使用它。
您需要修复这个问题,或者订购ViewResolver
bean。 例如,您可以使用Ordered
界面对它们进行Ordered
。 让你的类实现这个接口并返回一个合适的值。