主題
您可以套用 Spring Web MVC 框架主題來設定應用程式的整體外觀和風格,從而增強使用者體驗。主題是靜態資源的集合,通常是樣式表和影像,會影響應用程式的視覺樣式。
自 6.0 起,已棄用對主題的支援,轉而使用 CSS,且伺服器端沒有任何特殊支援。 |
定義主題
若要在您的 Web 應用程式中使用主題,您必須設定 org.springframework.ui.context.ThemeSource
介面的實作。WebApplicationContext
介面擴充了 ThemeSource
,但將其職責委派給專用的實作。預設情況下,委派是 org.springframework.ui.context.support.ResourceBundleThemeSource
實作,它從類別路徑的根目錄載入屬性檔案。若要使用自訂 ThemeSource
實作或配置 ResourceBundleThemeSource
的基本名稱前綴,您可以在應用程式 Context 中以保留名稱 themeSource
註冊 Bean。Web 應用程式 Context 會自動偵測具有該名稱的 Bean 並使用它。
當您使用 ResourceBundleThemeSource
時,主題會在簡單的屬性檔案中定義。屬性檔案列出構成主題的資源,如下列範例所示
styleSheet=/themes/cool/style.css background=/themes/cool/img/coolBg.jpg
屬性的鍵是從檢視程式碼引用主題元素的名稱。對於 JSP,您通常使用 spring:theme
自訂標籤來執行此操作,這與 spring:message
標籤非常相似。下列 JSP 片段使用上一個範例中定義的主題來自訂外觀和風格
<%@ 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
使用空的基本名稱前綴。因此,屬性檔案會從類別路徑的根目錄載入。因此,您會將 cool.properties
主題定義放在類別路徑根目錄的目錄中(例如,在 /WEB-INF/classes
中)。ResourceBundleThemeSource
使用標準 Java 資源套件載入機制,允許主題的完整國際化。例如,我們可以有一個 /WEB-INF/classes/cool_nl.properties
,它引用具有荷蘭語文字的特殊背景影像。
解析主題
在您定義主題之後,如前一節所述,您決定要使用哪個主題。DispatcherServlet
尋找名為 themeResolver
的 Bean,以找出要使用哪個 ThemeResolver
實作。主題解析器的工作方式與 LocaleResolver
非常相似。它偵測要用於特定請求的主題,並且還可以變更請求的主題。下表說明了 Spring 提供的主題解析器
類別 | 描述 |
---|---|
|
選取固定的主題,使用 |
|
主題維護在使用者的 HTTP Session 中。每個 Session 只需要設定一次,但不會在 Session 之間持續保存。 |
|
選取的主題儲存在客户端上的 Cookie 中。 |
Spring 也提供了 ThemeChangeInterceptor
,可讓您使用簡單的請求參數在每個請求上變更主題。