47 votes

Est-il possible d'utiliser plusieurs résolveurs de vues au printemps?

J'ai plusieurs résolveurs de vue dans ma configuration de printemps et je souhaitais utiliser différents résolveurs de vue en fonction des conditions.

Exemple pour les URL commencées avec report_* . Je voulais utiliser le résolveur de vues Birt et, pour les appels ajax, utiliser le résolveur de tuiles, etc.

J'ai essayé de définir la propriété order mais toutes les vues sont résolues par 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>
 

41voto

Sotirios Delimanolis Points 77933

Vous ne pouvez absolument. ViewResolver est une méthode simple, resolveViewName(String) qui renvoie

le point de Vue de l'objet, ou null si non trouvé (en option, pour permettre ViewResolver série)

Votre ViewResolver haricots sont enregistrés. Quand un nom de vue est renvoyé par un gestionnaire, le Printemps va itérer sur chaque ViewResolver, en invoquant leur resolveViewName méthode avec le nom donné. Si la méthode renvoie non-null, View est utilisé. Si null est retourné, puis il continue à l'itération.

Donc, la mise en œuvre a pour revenir null si le Printemps est de l'ignorer.

Il y a quelques implémentations ne jamais revenir null. Cela semble être le cas avec votre coutume ViewResolver les classes. Si l' ViewResolver renvoie un View, même si celle - View finira par ne parviennent pas à être rendu, le Printemps sera de l'utiliser.

Vous avez besoin soit de le corriger ou de l'ordre de votre ViewResolver haricots. Par exemple, vous pouvez les commander avec l' Ordered interface. Votre classes implémentent cette interface, et de retour à une valeur appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X