java - ¿Es posible usar diferentes resolutores de vistas?
spring-mvc birt (1)
Usted absolutamente puede. ViewResolver
tiene un único método, resolveViewName(String)
que devuelve
el objeto Ver, o nulo si no se encuentra (opcional, para permitir el encadenamiento ViewResolver)
Sus beans ViewResolver
están registrados. Cuando un manejador devuelve un nombre de vista, Spring ViewResolver
través de cada ViewResolver
, invocando su método resolveViewName
con el nombre dado. Si el método no es -null
, se utiliza esa View
. Si se devuelve null
, continúa iterando.
Entonces la implementación tiene que devolver null
si Spring debe omitirlo.
Hay algunas implementaciones que nunca vuelven null
. Este parece ser el caso con sus clases personalizadas de ViewResolver
. Si ViewResolver
devuelve una View
, incluso si esa View
finalmente no se procesara, Spring la usará.
O necesita corregirlo o pedir sus beans ViewResolver
. Por ejemplo, puede pedirlos con la interfaz Ordered
. Haga que sus clases implementen esa interfaz y devuelvan un valor apropiado.
Tengo múltiples resoluciones de vista en una configuración de Spring y quería usar diferentes resoluciones de vista para diferentes solicitudes.
Ejemplo: Para las URL que comienzan con report_*
, use Birt view resolver, y para las llamadas ajax use Tiles resolver, y así sucesivamente.
Se intentó establecer la propiedad de la orden, pero todas las vistas son resueltas por 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>