Est-il possible d’utiliser différents résolveurs de vues?

J’ai plusieurs résolveurs de vues dans une configuration Spring et je voulais utiliser différents résolveurs de vues pour différentes requêtes.

Exemple: pour les URL commençant par report_* , utilisez le résolveur de vue Birt et, pour les appels ajax, utilisez le résolveur de tuiles, etc.

Essayé la propriété order, mais toutes les vues sont résolues par tilesViewResolver .

     ...      

Vous pouvez absolument le faire. ViewResolver a une seule méthode, resolveViewName(Ssortingng) qui renvoie

l’object View, ou null s’il n’est pas trouvé (facultatif, pour permettre l’enchaînement de ViewResolver)

Vos grains ViewResolver sont enregistrés. Lorsqu’un nom de vue est renvoyé par un gestionnaire, Spring effectuera une itération dans chaque ViewResolver , resolveViewName méthode resolveViewName avec le nom donné. Si la méthode retourne non- -null , cette View est utilisée. Si null est retourné, alors il continue à itérer.

Donc, l’implémentation doit retourner null si Spring doit l’ignorer.

Il existe des implémentations qui ne renvoient jamais null . Cela semble être le cas avec vos classes ViewResolver personnalisées. Si ViewResolver renvoie une View , même si celle-ci ne sera pas rendue, Spring l’utilisera.

Vous devez soit réparer cela, soit commander vos beans ViewResolver . Par exemple, vous pouvez les commander avec l’interface Ordered . Demandez à vos classes d’implémenter cette interface et renvoyer une valeur appropriée.