Руководство по 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, поэтому его будет легко импортировать и запускать как есть.