En guide til ViewResolver i Spring MVC

1. Oversikt

Alle MVC-rammeverk gir en måte å jobbe med visninger på.

Spring gjør det via visningsoppløserne, som lar deg gjengi modeller i nettleseren uten å knytte implementeringen til en bestemt visningsteknologi.

De ViewResolver kartvisning navn til faktiske visninger.

Og vårrammen kommer med ganske mange visningsoppløsere, f.eks. InternalResourceViewResolver, XmlViewResolver, ResourceBundleViewResolver og noen få andre.

Dette er en enkel opplæring som viser hvordan du setter opp de vanligste visningsoppløserne og hvordan du bruker flere ViewResolver i samme konfigurasjon.

2. Vårens nettkonfigurasjon

La oss starte med nettkonfigurasjonen; vi kommenterer det med @EnableWebMvc, @Konfigurasjon og @ComponentScan:

@EnableWebMvc @Configuration @ComponentScan ("com.baeldung.web") offentlig klasse WebConfig implementerer WebMvcConfigurer {// All webkonfigurasjon vil gå her}

Det er her vi konfigurerer visningsoppløseren i konfigurasjonen.

3. Legg til en InternalResourceViewResolver

Dette ViewResolver lar oss sette egenskaper som prefiks eller suffiks til visningsnavnet for å generere den endelige URL-siden for visningssiden:

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

For en slik enkelhet i eksemplet trenger vi ikke en kontroller for å behandle forespørselen.

Vi trenger bare en enkel jsp side, plassert i / WEB-INF / visning mappe som definert i konfigurasjonen:

4. Legg til en ResourceBundleViewResolver

Som navnet på denne resolveren antyder a ResourceBundleViewResolver bruker bønnedefinisjoner i a ResourceBundle.

Først legger vi til ResourceBundleViewResolver til forrige konfigurasjon:

@Bean public ViewResolver resourceBundleViewResolver () {ResourceBundleViewResolver bean = new ResourceBundleViewResolver (); bean.setBasename ("views"); retur bønne; } 

Pakken er vanligvis definert i en egenskapsfil, som ligger i klassestien. Nedenfor er views.properties fil:

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

Vi kan bruke det enkle jsp side definert i eksemplet ovenfor for denne konfigurasjonen også.

5. Legg til en XmlViewResolver

Denne implementeringen av ViewResolver godtar en konfigurasjonsfil skrevet inn XML med det samme DTD som vårens XML bønnefabrikker:

@Bean public ViewResolver xmlViewResolver () {XmlViewResolver bean = ny XmlViewResolver (); bean.setLocation (ny ClassPathResource ("views.xml")); retur bønne; }

Nedenfor er konfigurasjonsfilen, views.xml:

Når det gjelder de foregående eksemplene, kan vi bruke det enkle jsp siden definert tidligere.

6. Kjetting ViewResolvers og definer en ordreprioritet

Spring MVC støtter også flere visningsoppløsere.

Dette lar deg overstyre bestemte visninger i noen tilfeller. Vi kan ganske enkelt kjede visningsoppløsere ved å legge til mer enn én oppløsning i konfigurasjonen.

Når vi har gjort det, må vi definere en ordre for disse resolverne. De rekkefølge eiendom brukes til å definere hvilken rekkefølge som er påkalt i kjeden. Jo høyere ordreegenskap (største ordrenummer), desto senere er visningsoppløseren plassert i kjeden.

For å definere rekkefølgen kan vi legge til følgende kodelinje i konfigurasjonen av våre visningsoppløsere:

bean.setOrder (0);

Vær forsiktig med ordreprioriteten som InternalResourceViewResolver burde ha en høyere orden - fordi det er ment å representere en veldig eksplisitt kartlegging. Og hvis andre resolvere har en høyere orden, så InternalResourceViewResolver kan aldri påberopes.

7. Konklusjon

I denne opplæringen konfigurerte vi en kjede av visningsoppløsere ved hjelp av Java-konfigurasjon. Ved å spille med ordreprioriteten kan vi sette rekkefølgen på påkallingen.

Implementeringen av denne enkle veiledningen finner du i github-prosjektet.