Een gids voor de ViewResolver in Spring MVC

1. Overzicht

Alle MVC-frameworks bieden een manier om met views te werken.

Spring doet dat via de view resolvers, waarmee je modellen in de browser kunt renderen zonder de implementatie aan een specifieke view-technologie te binden.

De ViewResolver kaarten weergavenamen tot werkelijke weergaven.

En het Spring-framework wordt geleverd met een flink aantal view resolvers, b.v. InternalResourceViewResolver, XmlViewResolver, ResourceBundleViewResolver en een paar anderen.

Dit is een eenvoudige tutorial die laat zien hoe u de meest voorkomende view resolvers en hoe meerdere te gebruiken ViewResolver in dezelfde configuratie.

2. De Spring Web-configuratie

Laten we beginnen met de webconfiguratie; we zullen er aantekeningen mee maken @EnableWebMvc, @Configuratie en @BuienRadarNL:

@EnableWebMvc @Configuration @ComponentScan ("com.baeldung.web") openbare klasse Webconfiguratie implementeert WebMvcConfigurer {// Alle webconfiguratie komt hier te staan}

Hier zullen we onze view resolver in de configuratie instellen.

3. Voeg een InternalResourceViewResolver

Dit ViewResolver stelt ons in staat om eigenschappen zoals voorvoegsel of achtervoegsel in te stellen voor de weergavenaam om de uiteindelijke URL van de weergavepagina te genereren:

@Bean openbare ViewResolver internalResourceViewResolver () {InternalResourceViewResolver bean = nieuwe InternalResourceViewResolver (); bean.setViewClass (JstlView.class); bean.setPrefix ("/ WEB-INF / view /"); bean.setSuffix (". jsp"); terugkeer boon; }

Voor zo'n eenvoud van het voorbeeld hebben we geen controller nodig om het verzoek te verwerken.

We hebben alleen een simpele nodig jsp pagina, geplaatst in de / WEB-INF / bekijk map zoals gedefinieerd in de configuratie:

4. Voeg een ResourceBundleViewResolver

Zoals de naam van deze resolver suggereert een ResourceBundleViewResolver gebruikt bean-definities in een ResourceBundle.

Eerst voegen we de ResourceBundleViewResolver naar de vorige configuratie:

@Bean openbare ViewResolver resourceBundleViewResolver () {ResourceBundleViewResolver bean = nieuwe ResourceBundleViewResolver (); bean.setBasename ("weergaven"); terugkeer boon; } 

De bundel wordt doorgaans gedefinieerd in een eigenschappenbestand, dat zich in het klassenpad bevindt. Hieronder is de views.eigenschappen het dossier:

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

We kunnen het simpele gebruiken jsp pagina gedefinieerd in het bovenstaande voorbeeld voor deze configuratie ook.

5. Voeg een XmlViewResolver

Deze implementatie van ViewResolver accepteert een configuratiebestand geschreven in XML met hetzelfde DTD als de lente XML bonenfabrieken:

@Bean openbare ViewResolver xmlViewResolver () {XmlViewResolver bean = nieuwe XmlViewResolver (); bean.setLocation (nieuwe ClassPathResource ("views.xml")); terugkeer boon; }

Hieronder staat het configuratiebestand, views.xml:

Wat betreft de voorgaande voorbeelden kunnen we onze simple gebruiken jsp pagina die eerder is gedefinieerd.

6. Chaining BekijkResolvers en definieer een orderprioriteit

Spring MVC ondersteunt ook meerdere view resolvers.

Hierdoor kunt u in bepaalde omstandigheden specifieke weergaven negeren. We kunnen eenvoudig view resolvers koppelen door meer dan één resolver aan de configuratie toe te voegen.

Zodra we dat hebben gedaan, moeten we een volgorde voor deze resolvers definiëren. De bestellen eigendom wordt gebruikt om te bepalen wat de volgorde van aanroepen in de keten is. Hoe hoger de ordereigenschap (grootste ordernummer), des te later wordt de view resolver in de keten gepositioneerd.

Om de volgorde te bepalen kunnen we de volgende regel code toevoegen aan de configuratie van de our view resolvers:

bean.setOrder (0);

Wees voorzichtig met de prioriteit van de bestelling, aangezien de InternalResourceViewResolver zou een hogere volgorde moeten hebben - omdat het bedoeld is om een ​​zeer expliciete afbeelding weer te geven. En als andere resolvers een hogere orde hebben, dan is de InternalResourceViewResolver misschien nooit worden ingeroepen.

7. Conclusie

In deze tutorial hebben we een chain of view resolvers geconfigureerd met behulp van Java-configuratie. Door te spelen met de volgorde prioriteit, kunnen we de volgorde van hun aanroep bepalen.

De implementatie van deze eenvoudige tutorial is te vinden in het github-project.