I have multiple view resolvers in my Spring configuration and I wanted to use different view resolvers for different requests
Example for urls started with
<beans:bean id="tilesViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver">
<beans:property name="viewClass" value="com.example.example.util.AjaxTiles21View"/>
<beans:bean id="birtViewResolver" class="org.eclipse.birt.spring.core.BirtViewResolver">
<beans:property name="order" value="2" />
<beans:bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="1" />
You absolutely can.
ViewResolver has a single method,
resolveViewName(String) which returns
the View object, or null if not found (optional, to allow for ViewResolver chaining)
ViewResolver beans are registered. When a view name is returned by a handler, Spring will iterate through each
ViewResolver, invoking their
resolveViewName method with the given name. If the method returns non
View is used. If
null is returned, then it continues iterating.
So the implementation has to return
null if Spring is to skip it.
There are some implementations that never return
null. This seems to be the case with your custom
ViewResolver classes. If the
ViewResolver returns a
View, even if that
View will eventually fail to be rendered, Spring will use it.
You either need to fix that or order your
ViewResolver beans. For example, you can order them with the
Ordered interface. Have your classes implement that interface and return an appropriate value.