Ръководство за ViewResolver в Spring MVC

1. Общ преглед

Всички MVC рамки осигуряват начин за работа с изгледи.

Spring прави това чрез преобразувателите на изгледи, които ви позволяват да изобразявате модели в браузъра, без да обвързвате изпълнението с определена технология за преглед.

На ViewResolver изгледа на картата имена реални изгледи.

И Spring рамката се предлага с доста разделители на изгледи , например InternalResourceViewResolver , XmlViewResolver , ResourceBundleViewResolver и няколко други.

Това е прост урок, показващ как да настроите най-често срещаните преобразуватели на изгледи и как да използвате множество ViewResolver в една и съща конфигурация .

2. Пролетната уеб конфигурация

Нека започнем с уеб конфигурацията; ще го коментираме с @EnableWebMvc , @Configuration и @ComponentScan :

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

Тук ще настроим нашия разделител на изглед в конфигурацията.

3. Добавете InternalResourceViewResolver

Този ViewResolver ни позволява да зададем свойства като префикс или суфикс на името на изгледа, за да генерираме крайния URL адрес на страницата за изглед:

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

За такава простота на примера не ни е необходим контролер за обработка на заявката.

Необходима ни е само проста jsp страница, поставена в папката / WEB-INF / view, както е дефинирана в конфигурацията:

4. Добавете ResourceBundleViewResolver

Както подсказва името на този преобразувател, ResourceBundleViewResolver използва дефиниции на боб в ResourceBundle .

Първо добавяме ResourceBundleViewResolver към предишната конфигурация:

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

Пакетът обикновено се дефинира във файл със свойства, разположен в пътя на класа. По-долу е файлът views.properties :

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

За тази конфигурация можем да използваме и простата jsp страница, дефинирана в горния пример.

5. Добавете XmlViewResolver

Тази реализация на ViewResolver приема конфигурационен файл, написан в XML със същия DTD като XML фабриките за боб на Spring :

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

По-долу е конфигурационният файл, views.xml :

Що се отнася до предишните примери, можем да използваме нашата проста jsp страница, дефинирана по-рано.

6. Обединяване на ViewResolvers и дефиниране на приоритет на поръчката

Spring MVC също поддържа множество преобразуватели на изгледи .

Това ви позволява да замените конкретни изгледи при някои обстоятелства. Можем просто да веригираме преобразуватели на изглед, като добавим повече от един резолвер към конфигурацията.

След като го направим, ще трябва да дефинираме ред за тези преобразуватели. Най за собственост се използва за определяне, която е от порядъка на извиквания във веригата. Колкото по-високо е свойството на поръчката (най-големият номер на поръчката), толкова по-късно преобразувателят на изглед е позициониран във веригата.

За да дефинираме реда, можем да добавим следния ред код към конфигурацията на нашите разделители за изглед:

bean.setOrder(0);

Бъдете внимателни с приоритета на поръчката, тъй като InternalResourceViewResolver трябва да има по-висок ред - защото е предназначен да представлява много явно картографиране. И ако други преобразуватели имат по-висок ред, тогава InternalResourceViewResolver може никога да не бъде извикан.

7. Заключение

В този урок конфигурирахме верига от преобразуватели на изглед, използвайки Java конфигурация. Като играем с приоритета на поръчката, можем да зададем реда на тяхното извикване.

Изпълнението на този прост урок може да бъде намерено в проекта github.