我正在使用Tiles / JSP构建一个Spring MVC Web应用程序作为视图技术。 以前我将路径存储在Common类中的公共图像:
public final static String IMG_BREADCRUMBS_NEXT = "/shared/images/famfam/bullet_arrow_right.png";
然后我会在jsp中使用这个类来获取像
这样的图像 <img src="<%= Common.IMG_BREADCRUMBS_NEXT %>"/>
我想在我的jsp代码中删除scriptlet并使用jstl等代替。 存储此类信息的最佳方式是什么?它是资源包吗? 你是怎么解决这个的?
答案 0 :(得分:2)
最后,我使用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网络应用主题的“跑步开始”。在我看来,这种设置可以很容易地改变应用程序的外观。
参考文献:
答案 1 :(得分:1)
在应用程序范围内使用配置bean,因此您可以编写类似
的内容<img src="${configuration.imagePath}/icon.png">
我不使用Spring,但您可以使用依赖注入来执行类似于我们在JBoss和Seam中执行的操作。
基本上,我们有一个名为Configuration的POJO类,它的属性是应用程序的配置参数,从XML配置加载(实际上是一个JBoss MBean,但这是偏离主题的)。在这个例子中,我们的bean将有一个getImagePath()
方法。
Seam将负责在“应用程序”范围内实例化配置bean的单个实例,以便始终可以在表达式中使用它,如上面那样。
答案 2 :(得分:0)
使用基于数据库确定主题的类不是更强大吗?这将允许用户管理主题,甚至根据时间或用户代理实现主题?
是否有可能同时使用spring主题,将主题保存在用户会话中?