java spring-mvc birt

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>