spring 主题使用详解[转]

在common_include_v2.jsp文件中,spring主题的使用:

<link href="${staticPath }/<spring:theme code='styleSheet'/>/jquery-ui/jquery-ui-1.9.0.css" rel="stylesheet" type="text/css"  />

新框架中为了满足对不同用户使用不同主题而特意引入,此用法导致问题就是项目中无法对jsp页面进行直接访问,既然出现了问题,那就得好好深入了解,然后再想其他办法解决。

框架中使用theme所涉及的相关配置文件:

在srcweb.xml中配置:
<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
在springMVC-serlvet.xml中配置:
  <bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver" >
        <property name="defaultThemeName" value="default" />
    </bean>
    
    <bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource">
        <property name="basenamePrefix" value="themes."></property>
    </bean>

------------------------------------------------------------------------------------------------------------------------------------

 今天主要介绍下关于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>

2.2 SessionThemeResolver

<bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">  
      <property name="defaultThemeName" value="summer"/>  
</bean>

设置主题名称为每个用户在HttpSession内保存

<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=u8FD9u662Fu590Fu5929uFF0Cu597Du70EDu554AuFF01  
hello.message=helloWorld!  

 需要注意的是其中的中文需要进行转码。

5.视图页面

 通过spring的tags可以将主题内容进行显示

<%@ taglib  prefix="spring" uri="http://www.springframework.org/tags" %>  
 <spring:theme code="welcome.message"></spring:theme> 

这样,打开具体页面时就会根据当前主题显示相应内容了。

------------------------------------------------------------------------------------------------------------------------------------

以上文章是网上资料,原文地址:http://www.iteye.com/topic/604484

参考资料:

http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch16s07.html

原文地址:https://www.cnblogs.com/bingya/p/3361774.html