Вы можете применять темы фреймворка Spring Web MVC для создания общего внешнего вида вашего приложения, тем самым повышая удобство работы с ним. Тема – это коллекция статических ресурсов, обычно таблиц стилей и изображений, которые влияют на визуальный стиль приложения.
Определение темы
Чтобы использовать темы в вашем веб-приложении, нужно настроить реализацию интерфейса org.springframework.ui.context.ThemeSource
. Интерфейс WebApplicationContext
расширяет ThemeSource
, но делегирует свои обязанности назначенной реализации. По умолчанию делегат представляет собой реализацию org.springframework.ui.context.support.ResourceBundleThemeSource
, которая загружает файлы свойств из корня classpath. Чтобы использовать пользовательскую реализацию ThemeSource
или сконфигурировать префикс базового имени ResourceBundleThemeSource
, можно зарегистрировать бин в контексте приложения под зарезервированным именем themeSource
. Контекст веб-приложения автоматически обнаруживает бин с таким именем и использует его.
Если вы используете ResourceBundleThemeSource
, тема определяется в простом файле свойств. В файле свойств перечислены ресурсы, составляющие тему, как показано в следующем примере:
styleSheet=/themes/cool/style.css background=/themes/cool/img/coolBg.jpg
Ключами свойств являются имена, которые ссылаются на тематические элементы из кода представления. Для JSP это обычно делается с помощью кастомного тега spring:theme
, который очень похож на тег spring:message
. В следующем фрагменте на JSP для настройки внешнего вида и ощущения используется тема, определенная в предыдущем примере:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
<head>
<link rel="stylesheet" href="<spring:theme code='styleSheet'/>" type="text/css"/>
</head>
<body style="background=<spring:theme code='background'/>">
...
</body>
</html>
По умолчанию ResourceBundleThemeSource
использует пустой префикс базового имени. В результате файлы свойств загружаются из корня classpath. Таким образом, вы поместите определение темы cool.properties
в каталог в корне classpath (например, в /WEB-INF/classes
). ResourceBundleThemeSource
использует стандартный механизм загрузки ресурсных локализационных пакетов Java, что позволяет полностью интернационализировать темы. Например, у нас может быть файл /WEB-INF/classes/cool_nl.properties
, который ссылается на специальное фоновое изображение с голландским текстом на нем.
Распознавание тем
После определения тем, как описано в предыдущем разделе, вы решаете, какую тему использовать. DispatcherServlet
ищет бин с именем themeResolver
, чтобы узнать, какую реализацию ThemeResolver
использовать. Распознаватель тем работает примерно так же, как и LocaleResolver
. Он определяет тему, которую следует использовать для конкретного запроса, а также может изменять запрашиваемую тему. В следующей таблице описаны распознаватели тем, содержащиеся в Spring:
Класс | Описание |
---|---|
|
Выбирает фиксированную тему, установленную с помощью свойства |
|
Тема сохраняется в HTTP-сессии пользователя. Его нужно настраивать лишь единожды для каждой сессии, но он не сохраняется между сессиями. |
|
Выбранная тема хранится в cookie на стороне клиента. |
Spring также предоставляет ThemeChangeInterceptor
, который позволяет изменять тему при каждом запросе с помощью простого параметра запроса.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ