Guide du ViewResolver dans Spring MVC

1. Vue d'ensemble

Tous les frameworks MVC permettent de travailler avec des vues.

Spring fait cela via les résolveurs de vue, qui vous permettent de rendre des modèles dans le navigateur sans lier l'implémentation à une technologie de vue spécifique.

Le ViewResolver mappe les noms de vue aux vues réelles.

Et le framework Spring est livré avec un certain nombre de résolveurs de vue, par exemple InternalResourceViewResolver , XmlViewResolver , ResourceBundleViewResolver et quelques autres.

Il s'agit d'un didacticiel simple montrant comment configurer les résolveurs de vue les plus courants et comment utiliser plusieurs ViewResolver dans la même configuration .

2. La configuration Web Spring

Commençons par la configuration Web; nous l' annoterons avec @EnableWebMvc , @Configuration et @ComponentScan :

@EnableWebMvc @Configuration @ComponentScan("com.baeldung.web") public class WebConfig implements WebMvcConfigurer { // All web configuration will go here }

C'est ici que nous allons mettre en place notre résolveur de vue dans la configuration.

3. Ajoutez un InternalResourceViewResolver

Ce ViewResolver nous permet de définir des propriétés telles que le préfixe ou le suffixe du nom de la vue pour générer l'URL de la page de vue finale:

@Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setViewClass(JstlView.class); bean.setPrefix("/WEB-INF/view/"); bean.setSuffix(".jsp"); return bean; }

Pour une telle simplicité de l'exemple, nous n'avons pas besoin d'un contrôleur pour traiter la demande.

Nous n'avons besoin que d'une simple page jsp , placée dans le dossier / WEB-INF / view comme défini dans la configuration:

4. Ajoutez un ResourceBundleViewResolver

Comme le nom de ce résolveur l'indique, ResourceBundleViewResolver utilise des définitions de bean dans un ResourceBundle .

Tout d'abord, nous ajoutons le ResourceBundleViewResolver à la configuration précédente:

@Bean public ViewResolver resourceBundleViewResolver() { ResourceBundleViewResolver bean = new ResourceBundleViewResolver(); bean.setBasename("views"); return bean; } 

Le bundle est généralement défini dans un fichier de propriétés, situé dans le chemin de classe. Voici le fichier views.properties :

sample.(class)=org.springframework.web.servlet.view.JstlView sample.url=/WEB-INF/view/sample.jsp

Nous pouvons également utiliser la simple page jsp définie dans l'exemple ci-dessus pour cette configuration.

5. Ajoutez un XmlViewResolver

Cette implémentation de ViewResolver accepte un fichier de configuration écrit en XML avec la même DTD que les usines de bean XML de Spring :

@Bean public ViewResolver xmlViewResolver() { XmlViewResolver bean = new XmlViewResolver(); bean.setLocation(new ClassPathResource("views.xml")); return bean; }

Voici le fichier de configuration, views.xml :

Comme pour les exemples précédents, nous pouvons utiliser notre simple page jsp définie précédemment.

6. Chaînage des ViewResolvers et définition d'une priorité de commande

Spring MVC prend également en charge plusieurs résolveurs de vue .

Cela vous permet de remplacer des vues spécifiques dans certaines circonstances. Nous pouvons simplement chaîner les résolveurs de vue en ajoutant plusieurs résolveurs à la configuration.

Une fois que nous avons fait cela, nous devrons définir un ordre pour ces résolveurs. La propriété order est utilisée pour définir quel est l'ordre des invocations dans la chaîne. Plus la propriété d'ordre est élevée (numéro d'ordre le plus élevé), plus le résolveur de vue est positionné tardivement dans la chaîne.

Pour définir l'ordre, nous pouvons ajouter la ligne de code suivante à la configuration des résolveurs de notre vue:

bean.setOrder(0);

Faites attention à la priorité de l'ordre car le InternalResourceViewResolver doit avoir un ordre plus élevé - car il est destiné à représenter un mappage très explicite. Et si d'autres résolveurs ont un ordre supérieur, le InternalResourceViewResolver peut ne jamais être appelé.

7. Conclusion

Dans ce didacticiel, nous avons configuré une chaîne de résolveurs de vues à l'aide de la configuration Java. En jouant avec la priorité de l'ordre, nous pouvons définir l'ordre de leur invocation.

L'implémentation de ce tutoriel simple se trouve dans le projet github.