En guide til ViewResolver i Spring MVC

1. Oversigt

Alle MVC-rammer giver en måde at arbejde med synspunkter på.

Spring gør det via visningsopløserne, som giver dig mulighed for at gengive modeller i browseren uden at binde implementeringen til en bestemt visningsteknologi.

Det ViewResolver kort viser visningsnavne til faktiske visninger.

Og forårets ramme kommer med en hel del synsopløsere, f.eks. InternalResourceViewResolver, XmlViewResolver, ResourceBundleViewResolver og et par andre.

Dette er en simpel vejledning, der viser, hvordan man opsætter de mest almindelige visningsopløsere og hvordan man bruger flere ViewResolver i samme konfiguration.

2. Spring Web Configuration

Lad os starte med webkonfigurationen; vi kommenterer det med @EnableWebMvc, @Konfiguration og @ComponentScan:

@EnableWebMvc @Configuration @ComponentScan ("com.baeldung.web") offentlig klasse WebConfig implementerer WebMvcConfigurer {// Al webkonfiguration går her}

Det er her, vi konfigurerer vores view resolver i konfigurationen.

3. Tilføj en InternalResourceViewResolver

Det her ViewResolver giver os mulighed for at indstille egenskaber som f.eks. præfiks eller suffiks til visningsnavnet for at generere den endelige URL-side for visningssiden:

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

For en sådan enkelhed i eksemplet har vi ikke brug for en controller til at behandle anmodningen.

Vi har kun brug for et simpelt jsp side, placeret i / WEB-INF / visning mappe som defineret i konfigurationen:

4. Tilføj en ResourceBundleViewResolver

Som navnet på denne resolver antyder a ResourceBundleViewResolver bruger bønnedefinitioner i a ResourceBundle.

Først tilføjer vi ResourceBundleViewResolver til den forrige konfiguration:

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

Pakken er typisk defineret i en egenskabsfil, der er placeret på klassestien. Nedenfor er views.properties fil:

prøve. (klasse) = org.springframework.web.servlet.view.JstlView sample.url = / WEB-INF / view / sample.jsp

Vi kan bruge det enkle jsp side defineret i ovenstående eksempel også for denne konfiguration.

5. Tilføj en XmlViewResolver

Denne implementering af ViewResolver accepterer en konfigurationsfil, der er skrevet ind XML med det samme DTD som forårets XML bønnefabrikker:

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

Nedenfor er konfigurationsfilen, views.xml:

Med hensyn til de tidligere eksempler kan vi bruge vores enkle jsp side defineret tidligere.

6. Lænkning ViewResolvers og definer en ordreprioritet

Spring MVC understøtter også flere visningsopløsere.

Dette giver dig mulighed for at tilsidesætte specifikke synspunkter under visse omstændigheder. Vi kan simpelthen kæde visningsopløsere ved at tilføje mere end én opløsningsenhed til konfigurationen.

Når vi har gjort det, bliver vi nødt til at definere en ordre for disse opløsere. Det bestille ejendom bruges til at definere, hvilken rækkefølge der er påkaldelse i kæden. Jo højere ordreegenskaben (største ordrenummer), jo senere placeres visningsopløseren i kæden.

For at definere rækkefølgen kan vi tilføje følgende linje kode til konfigurationen af ​​vores visningsopløsere:

bean.setOrder (0);

Vær forsigtig med ordreprioriteten som InternalResourceViewResolver skulle have en højere orden - fordi det er beregnet til at repræsentere en meget eksplicit kortlægning. Og hvis andre resolvere har en højere orden, så er InternalResourceViewResolver kan aldrig påberåbes.

7. Konklusion

I denne vejledning konfigurerede vi en kæde af visningsopløsere ved hjælp af Java-konfiguration. Ved at spille med ordreprioriteten kan vi indstille rækkefølgen for deres påkaldelse.

Implementeringen af ​​denne enkle vejledning kan findes i github-projektet.