最后我使用了 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 Web 应用程序主题的“运行开始”。在我看来,这种设置可以很容易地改变应用程序的外观和感觉。
参考: