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

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

1. обзор

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

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

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

И Spring Framework поставляется с довольно большим количеством определителей, например InternalResourceViewResolver,XmlViewResolver,ResourceBundleViewResolver и некоторые другие.

Это простое руководство, показывающее, как настроить наиболее распространенные преобразователи представлений иhow to use multiple ViewResolver in the same configuration.

2. Веб-конфигурация Spring

Начнем с веб-конфигурации. мы аннотируем его@EnableWebMvc,@Configuration и@ComponentScan:

@EnableWebMvc
@Configuration
@ComponentScan("com.example.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;
}

[.hps]#Forsuch simplicity # примера, нам не нужен контроллер для обработки запроса.

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


    
    
        

This is the body of the sample view

4. ДобавитьResourceBundleViewResolver

Как следует из названия этого преобразователя,ResourceBundleViewResolver использует определения bean-компонентов в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, что и фабрики компонентов SpringXML:

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

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


    

[.hps] [result_box .short_text]#As for the previous examples [.hps]#we can use our simple jsp page defined [.hps]#previously.

6. ОбъединениеViewResolvers в цепочку и определение приоритета заказа

Spring MVC также поддерживаетmultiple view resolvers.

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

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

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

bean.setOrder(0);

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

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

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

Реализацию этого простого руководства можно найти вgithub project - это проект на основе Eclipse, поэтому его будет легко импортировать и запускать как есть.