В конце концов, я использовал поддержку тем Spring для достижения того, чего хотел.
В моем коде просмотра я использую тег <spring:theme code=""/>
, чтобы получить путь к файлу изображения:
<img src="<spring:theme code="theme.images.actions.edit.link"/>" />
Этот тег ведет себя как любой тег <fmt:message>
или <spring:message>
, но у него есть свои собственные "наборы сообщений". Необходимые конфигурации в моем applicationContext:
<!--
=========================================================
Themes
=========================================================
-->
<bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">
<property name="defaultThemeName" value="themes.default"/>
</bean>
<bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource" />
Все темы моего приложения хранятся в /WEB-INF/classes/themes/
. Свойства темы по умолчанию находятся в /WEB-INF/classes/themes/default.properties
Это выглядит так:
...
theme.images.actions.show.link=/@contextPath@/shared/images/famfam/zoom.png
theme.images.actions.delete.link=/@contextPath@/shared/images/famfam/cross.png
...
Чтобы изменить тему (и значки) моего приложения, я использую ThemeChangeInterceptor (в applicationContext)
<!--
=========================================================
Theme resolving
=========================================================
-->
<bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
<property name="paramName" value ="theme" />
</bean>
Это позволяет пользователю переключать тему с помощью параметра запроса "&theme=themes.default"
или "&theme=themes.alternative"
.
Одной из ключевых частей моей настройки является @contextPath@
в файле свойств темы. Это заменяется во время процесса сборки Ant правильным контекстным путем для среды разработки / тестирования / производства. Ключевая часть моего build.xml:
<!-- copy all common themes to classes -->
<copy todir="${build.war}/WEB-INF/classes/themes" overwrite="true" filtering="true">
<fileset dir="resources/themes" includes="**/*.properties" />
<filterchain>
<replacetokens>
<token key="contextPath" value="${setup.contextPath}"/>
</replacetokens>
</filterchain>
</copy>
Надеюсь, это даст вам "быстрый старт" в темах веб-приложений Spring. На мой взгляд, эта настройка позволяет легко изменять внешний вид приложения.
Ссылки: