現在的位置: 首頁 > 綜合 > 正文

springMVC主題的使用

2013年07月14日 ⁄ 綜合 ⁄ 共 2588字 ⁄ 字型大小 評論關閉

在實際開發中,經常會碰到這樣一個問題,客戶要求更換版面風格。不一定是美工做的不好,也有可能是客戶的視覺疲勞。所

已在項目的開始階段,最好就要考慮這些靈活的需求變化。
這個在網站程序中稱為:主題(theme)
主題的實現原理:大概就是把網站版面的css樣式表和圖片之類的文件,和網站的程序進行解耦。程序讀取theme的持久化配置

,然後找到相應的css樣式表和圖片,配置網站版面。

本篇文章是翻譯的springMVC的主題部分,希望大家以後構架項目的初期,就多考慮國際化、主題等需求。

一、主題的概述
   採用springMVC的主題概念,我們可以控制程序的整體感官效果,從而概述用戶的體驗。主題是影響程序視覺效果的樣式表

、靜態資源和圖片等資源的集合。
二、定義主題
   要在你的程序中使用主題,你必須設置一個org.springframework.ui.context.ThemeSource介面的實現類。

WebApplicationContext 類本身是實現了該介面的,但是只是簡單的把責任代理給了一個特定的實現。默認情況下,這個代理

是org.springframework.ui.context.support.ResourceBundleThemeSource的一個實現,這個實現類從classpath根目錄下載入

一個properties文件。
   要定義一個自己的ThemeSource實現或者是設置ResourceBundleThemeSource的前綴字元,我們可以在application context

中註冊一個名字為themeSource的bean,那麼spring就會自動的尋找和使用這個bean了。
  
   當我們使用ResourceBundleThemeSource時,主題被簡單的定義到一個properties文件中,這個文件列出主題的組成資源:
e.g.
 

 styleSheet=/themes/cool/style.css
 background=/themes/cool/img/coolBg.jpg

 

   properties文件中的key是,視圖文件中元素的名稱。對應jsp文件,我們可以簡單的通過spring:theme標籤訪問,就像使用

spring:message 標籤。下面的jsp代碼片段使用了上面的主題定義:
e.g.
 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
 <html>
    <head>
       <link rel="stylesheet" href="<spring:theme code='styleSheet'/>" type="text/css"/>
    </head>
    <body style="background=<spring:theme code='background'/>">
       ...
    </body>
 </html>

   默認情況,ResourceBundleThemeSource使用空的前綴名稱。所以,classpath根目錄下properties文件就會被載入。因此我

們應該把cool.properties文件放到classpath根目錄下。例如, 在 /WEB-INF/classes目錄下。ResourceBundleThemeSource使

用標準的java resource bundle,這允許使用國際化的主題(應該是不同國家使用不同主題)。例如,我們可以建立/WEB-

INF/classes/cool_nl.properties來設置荷蘭人訪問時的主題。

三、主題解析器
  在我們定義了主題以後,DispatcherServlet將會找到一個名字叫做themeResolver的主題解析器,主題解析器的工作原理和

LocaleResolver很類似。它檢測對應一個請求應該使用的主題,並且可以動態的切換主題。下面是spring提供的主題解析器:
 Class    description
FixedThemeResolver 選擇一個固定的主題,通過defaultThemeName屬性設定
SessionThemeResolver 主題在用戶的session中被管理,一個session只需設置一次,但不會被持久化。
CookieThemeResolver 主題選擇被存儲在客戶端的cookie中

   另外,spring提供一個ThemeChangeInterceptor,運行我們在request中設置要使用的主題。

 xml配置實例:這個是我自己系統的配置實例

 參數中設置themeName=XXX可以手動修改主題,通過下面的配置默認會找classthpath下面themes/cool.properties

 <!-- theme解析器 -->
 <bean id="themeChangeInterceptor"
  class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
  <property name="paramName" value="themeName"></property>
 </bean>
 <bean id="themeSource"
  class="org.springframework.ui.context.support.ResourceBundleThemeSource">
   <property name="basenamePrefix" value="themes/"></property>
 </bean>
 <bean id="themeResolver"
  class="org.springframework.web.servlet.theme.CookieThemeResolver">
  <property name="defaultThemeName" >
   <value>cool</value>
  </property>
 </bean>

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

如果你對java、swing、各種框架、javascript、css、linux、資料庫編程等知識很感興趣,或者正在從事這些工作,

歡迎加入我的qq技術交流群:java不瘸腿(219345774)

【上篇】
【下篇】

抱歉!評論已關閉.