今天主要介绍下关于spring下主题(Theme)的内容,之前去网上搜索下了相关内容,发现其使用介绍都很简单,我这里详细介绍下如何使用spring的主题。
1、ThemeSource
ThemeSource,说简单点,主要用于如何定位相应的主题资源文件。默认状态下,其具体实现类ResourceBunldeThemeSource是在类路径根目录下查找相应的资源文件,不过可以通过配置器属性basenamePrefix来制定。
- <bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource">
- <property name="basenamePrefix" value="com.jack.themes."></property>
- </bean>
这样,DispatcherServlet就会下com.jack.themes包下进行查找资源文件。
2、ThemeResolver
ThemeResolver的功能和ViewResolver、LocaleResolver类似,主要根据配置返回Theme。Spring默认提供三个ThemeResolver具体的类:
(1).FixedThemeResolver
(2).SessionThemeResolver
(3).CookieThemeResolver
三个类的区别直接可以通过其名字就可以看出,fix表示固定,Session即会话,而cookie就是利用cookie了。以下我一一列出使用例子
2.1 FixedThemeResolver
- <bean id="themeResolver" class="org.springframework.web.servlet.theme.FixedThemeResolver">
- <property name="defaultThemeName" value="summer"/>
- </bean>
设置主题文件为summer.properties,在整个项目内固定不变。
2.2 SessionThemeResolver
- <bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">
- <property name="defaultThemeName" value="summer"/>
- </bean>
设置主题名称为每个用户在HttpSession内保存。
2.3 CookieThemeResolver
- <bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver">
- <property name="defaultThemeName" value="summer"/>
- </bean>
主题保存在Cookie中。
3、ThemeChangeInterceptor
如果需要根据用户请求来改变主题,则需要使用ThemeChangeInterceptor拦截器了。
- <bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
- <property name="paramName" value="themeName"></property>
- </bean>
其中设置用户请求参数名为themeName,即url为?themeName=具体的主题名称。此外,还需要在handlerMapping中配置拦截器
- <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
- <property name="interceptors" >
- <list>
- <ref local="themeChangeInterceptor"/>
- </list>
- </property>
- </bean>
这样,当ThemeResolver为CookieThemeResolver或者SessionThemeResolver时,可以通过url的参数设置来制定主题。
http://....../?themeName=summer,则主题为summer.properties文件
http://....../?themeName=winter,则主题为winter.properties文件。
4.主题文件
主题文件为主题名.properties格式,具体其内容则是一些key-value对,表示一些css或者图片、文字等。如
- welcome.message=\u8FD9\u662F\u590F\u5929\uFF0C\u597D\u70ED\u554A\uFF01
- hello.message=helloWorld!
需要注意的是其中的中文需要进行转码。
5.视图页面
通过spring的tags可以将主题内容进行显示
- <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
- <spring:theme code="welcome.message"></spring:theme>
这样,打开具体页面时就会根据当前主题显示相应内容了。