Comment faire pour utiliser plusieurs ViewResolvers au Printemps?
Je suis en train de travailler sur une application web où j'ai la plupart de mes pages faisant usage de apache tuiles (2.1.2), mais quelques-uns d'entre eux ont besoin d'être juste la plaine des pages jsp.
Je vais avoir un problème à la fois un InternalResourceViewResolver
et un UrlBasedViewResolver
va essayer de résoudre la vue de n'importe quoi, de sorte que, quel que soit la commande que j'utilise, il va échouer sur la plaine des pages JSP, ou sur les carreaux de pages.
Voici la config:
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
<property name="order" value="0"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="1"/>
</bean>
Pour le rendre plus clair ce que je suis en train de faire, j'ai besoin d'être en mesure d'avoir des états d'affichage comme ceci:
<view-state id="someState" view="/someDir/foo"><!--render foo.jsp -->
<transition on="foo" to="bar"/>
</view-state>
<view-state id="someState" view="something.core"><!--render tile defintion named 'something.core' -->
<transition on="foo" to="bar"/>
</view-state>
Personne ne sait comment le configurer de sorte que je peux le faire pour rendre les carreaux de définitions et de la plaine jsp?
Vous devez vous connecter pour publier un commentaire.
Comme vous le dites, vous ne pouvez pas la chaîne de ces ensemble. La javadoc pour les deux etats clairement qu'ils doivent à la fois être à la fin de la résolution de la chaîne.
Je suggère que si vous avez vraiment besoin d'utiliser ces togather, puis vous écrivez une simple coutume de mise en œuvre de ViewResolver qui prend le nom de la vue, et décide lequel de vos deux "vrais" afficher les résolveurs de délégué à. Cela suppose que vous pouvez dire qui de résolution à l'appel en se basant sur le nom de la vue.
Donc, si vous voulez définir une coutume ViewResolver comme ceci:
Vous auriez besoin pour mettre en œuvre les isTilesView méthode pour décider quel outil pour délégué à.
Dans le fichier XML de config, de définir ce nouveau point de vue résolveur, et assurez-vous qu'il apparaît avant les autres.
Je viens de résoudre le même problème en divisant le
*-servlet.xml
fichier de config à deux; dans mon cas, le principal de l'application utilise des Tuiles, mais je veux QUnit tests pour être simple Jsp.app-servlet.xml
contient uniquement les Carreaux de vue résolveur,tests-servlet.xml
ne contient que la JSP vue résolveur etweb.xml
mappages sont la distribution des demandes à la bonne servlet en se basant sur l'URL.On dirait que vous êtes sur la bonne voie, mais la chose à garder à l'esprit est que certains résolveurs de se comporter comme si ils ont toujours résolu à la vue. Vous devez assurez-vous de mettre ces résolveurs dernière dans votre commande. Je crois que les Carreaux de vue en est un exemple.
Edit: oups... oui, l'autre affiche est correct, à la fois de ces résolveurs fera toujours de match, de sorte que vous ne pouvez pas les utiliser à la fois dans une chaîne. Une autre alternative serait d'essayer de prolonger la TilesView de faire un simple JSP rendre si il ne trouve pas un configuré affichage en mosaïque.
Oui, vous pouvez utiliser n'importe quel nombre de vue résolveur dans votre projet.
De sorte que vous pouvez utiliser à la fois les tuiles de Vue résolveur " et "vue Interne de résolution" dans un même projet. .
vous devez configurer un ContentNegotiatingViewResolver . .
et donner la valeur de la commande de votre point de vue résolveurs.
comme j'ai donné des carreaux de vue résolveur 2 et internalviewresolver 3. .Il va d'abord vérifier dans les carreaux de définitions si la vue n'est pas trouvé dans les tuiles il sera vérifié dans InternaiViewResolver
voici quelques configurations qui fonctionne pour moi.
J'ai résolu ce problème en ajoutant simplement les carreaux de définition de la plaine de jsp de la mise en page, comme ceci:
Alors vous ne pouvez utiliser cette mise en page en tant que modèle pour y compris votre simple des fichiers jsp.
Et modèle de mise en page du fichier: