一尘不染

Spring MVC Webapp:在哪里存储常见图像的路径?

jsp

我正在构建一个将Tiles / JSP作为视图技术的Spring MVC Web应用程序。以前,我在Common类中存储了常见图像的路径:

 public final static String IMG_BREADCRUMBS_NEXT = "/shared/images/famfam/bullet_arrow_right.png";

然后我将在jsp中使用此类来获取图像src,例如

 <img src="<%= Common.IMG_BREADCRUMBS_NEXT %>"/>

我想摆脱我的jsp代码中的scriptlet,而改用jstl等。存储此类信息的最佳方法是什么?是资源包吗?您如何解决这个问题?


阅读 250

收藏
2020-06-08

共1个答案

一尘不染

最后,我使用了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应用程序主题上提供一个“开始”。在我看来,此设置可以非常轻松地更改应用程序的外观。

参考文献:

2020-06-08