主題
您可以應用 Spring Web MVC 框架主題來設定應用程式的整體外觀,從而增強使用者體驗。主題是一系列靜態資源的集合,通常是樣式表和影像,它們影響應用程式的視覺風格。
自 6.0 版本起,對主題的支援已被棄用,推薦使用 CSS,並且伺服器端無需任何特殊支援。 |
定義主題
要在您的 Web 應用程式中使用主題,您必須設定一個實現 org.springframework.ui.context.ThemeSource
介面的類。WebApplicationContext
介面擴充套件了 ThemeSource
,但將其職責委託給一個專門的實現。預設情況下,委託物件是 org.springframework.ui.context.support.ResourceBundleThemeSource
實現,它從類路徑根目錄載入屬性檔案。要使用自定義 ThemeSource
實現或配置 ResourceBundleThemeSource
的基本名稱字首,您可以在應用程式上下文中註冊一個保留名稱為 themeSource
的 Bean。Web 應用程式上下文會自動檢測具有該名稱的 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 會話中。每個會話只需設定一次,但不會在會話之間持久化。 |
|
所選主題儲存在客戶端的 Cookie 中。 |
Spring 還提供了一個 ThemeChangeInterceptor
,它允許透過簡單的請求引數更改每個請求的主題。