Рубрики
Без рубрики

Руководство по ViewResolver в Spring MVC

Краткое и практическое руководство по использованию различных распознавателей представлений в приложении Spring MVC.

Автор оригинала: baeldung.

1. Обзор

Все фреймворки MVC предоставляют способ работы с представлениями.

Spring делает это с помощью распознавателей представлений, которые позволяют визуализировать модели в браузере, не привязывая реализацию к определенной технологии представления.

ViewResolver сопоставляет имена представлений с фактическими представлениями.

И Spring framework поставляется с довольно большим количеством распознавателей представлений, например 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 , как определено в конфигурации:


    
    
        

This is the body of the sample 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 , что и фабрики компонентов Spring XML :

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

Ниже приведен файл конфигурации, views.xml :


    

Что касается предыдущих примеров мы можем использовать наши простой jsp страница определена ранее.

6. Цепочка ViewResolvers и определение приоритета заказа

Spring MVC также поддерживает несколько распознавателей представлений .

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

Как только мы это сделаем, нам нужно будет определить порядок для этих решателей. Свойство order используется для определения порядка вызовов в цепочке. Чем выше свойство order (наибольший номер заказа), тем позже viewresolver позиционируется в цепочке.

Чтобы определить порядок, мы можем добавить следующую строку кода в конфигурацию распознавателей наших представлений:

bean.setOrder(0);

Будьте осторожны с приоритетом порядка, так как InternalResourceViewResolver должен иметь более высокий порядок – потому что он предназначен для представления очень явного отображения. И если другие распознаватели имеют более высокий порядок, то InternalResourceViewResolver может никогда не вызываться.

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

В этом уроке мы настроили цепочку распознавателей представлений с помощью конфигурации Java. Играя с приоритетом порядка, мы можем установить порядок их вызова.

Реализацию этого простого учебника можно найти в проекте github .