Un guide sur le ViewResolver au printemps MVC
1. Vue d'ensemble
Tous les frameworks MVC fournissent un moyen de travailler avec des vues.
Spring le fait via les résolveurs de vues, qui vous permettent de restituer des modèles dans le navigateur sans lier l'implémentation à une technologie de vue spécifique.
LeViewResolver mappe les noms de vues aux vues réelles.
Et le framework Spring est livré avec plusieurs résolveurs de vues, par exemple. InternalResourceViewResolver,XmlViewResolver,ResourceBundleViewResolver et quelques autres.
Il s'agit d'un didacticiel simple montrant comment configurer les résolveurs de vue et leshow to use multiple ViewResolver in the same configuration les plus courants.
2. La configuration Web Spring
Commençons par la configuration Web; nous l'annoterons avec@EnableWebMvc,@Configuration et@ComponentScan:
@EnableWebMvc
@Configuration
@ComponentScan("com.example.web")
public class WebConfig implements WebMvcConfigurer {
// All web configuration will go here
}
C'est ici que nous allons configurer notre résolveur de vue dans la configuration.
3. Ajouter unInternalResourceViewResolver
CeViewResolver 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;
}
[.hps]#Forsuch simplicity # de l'exemple, nous n'avons pas besoin d'un contrôleur pour traiter la requête.
Nous n'avons besoin que d'une simple pagejsp, placée dans le dossier/WEB-INF/view comme défini dans la configuration:
This is the body of the sample view
4. Ajouter unResourceBundleViewResolver
Comme le nom de ce résolveur le suggère, unResourceBundleViewResolver utilise des définitions de bean dans unResourceBundle.
Tout d'abord, nous ajoutons lesResourceBundleViewResolver à la configuration précédente:
@Bean
public ViewResolver resourceBundleViewResolver() {
ResourceBundleViewResolver bean = new ResourceBundleViewResolver();
bean.setBasename("views");
return bean;
}
Le paquet est généralement défini dans un fichier de propriétés, situé dans le chemin de classe. Voici le fichierviews.properties:
sample.(class)=org.springframework.web.servlet.view.JstlView
sample.url=/WEB-INF/view/sample.jsp
Nous pouvons également utiliser la simple pagejsp définie dans l'exemple ci-dessus pour cette configuration.
5. Ajouter unXmlViewResolver
Cette implémentation deViewResolver accepte un fichier de configuration écrit enXML avec les mêmesDTD que les usines de haricotsXML 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:
[.hps] [result_box .short_text]#As for the previous examples [.hps]#we can use our simple jsp page defined [.hps]#previously.
6. Chaînage deViewResolvers et définition d'une priorité de commande
Spring MVC prend également en charge lesmultiple view resolvers.
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 aurons fait cela, nous devrons définir un ordre pour ces résolveurs. Leorder property est utilisé pour définir quel est l'ordre des invocations dans la chaîne. Plus la propriété d'ordre (numéro d'ordre le plus grand) est élevée, plus le résolveur de vues est positionné tard dans la chaîne.
Pour définir la commande, nous pouvons ajouter la ligne de code suivante à la configuration des résolveurs de nos vues:
bean.setOrder(0);
Soyez prudent sur la priorité de l'ordre car lesInternalResourceViewResolver doivent avoir un ordre supérieur - car il est destiné à représenter un mappage très explicite. Et si d'autres résolveurs ont un ordre supérieur, alors lesInternalResourceViewResolver pourraient ne jamais être appelés.
7. Conclusion
Dans ce tutoriel, nous avons configuré une chaîne de résolveurs de vues utilisant la configuration Java. En jouant avec l'ordre de priorité, nous pouvons définir l'ordre de leur invocation.
L'implémentation de ce didacticiel simple peut être trouvée dans legithub project - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.