|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
主题
您可以应用 Spring Web MVC 框架的主题来设置应用程序的整体外观和风格,从而提升用户体验。主题是一组静态资源的集合,通常包括样式表和图像,用于影响应用程序的视觉样式。
| 从 6.0 版本起,对主题(themes)的支持已被弃用,转而推荐使用 CSS, 且服务器端不再提供任何特殊支持。 |
定义主题
要在您的Web应用程序中使用主题(themes),您必须设置一个实现了
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 使用一个空的 basename 前缀。因此,属性文件会从类路径的根目录加载。所以,您应将 cool.properties 主题定义文件放在类路径根目录下的某个目录中(例如,放在 /WEB-INF/classes 中)。ResourceBundleThemeSource 使用标准的 Java 资源包加载机制,从而支持主题的完整国际化。例如,我们可以有一个 /WEB-INF/classes/cool_nl.properties 文件,其中引用一张带有荷兰语文本的特殊背景图片。
解析主题
按照前一节所述定义主题之后,
你需要决定使用哪个主题。DispatcherServlet会查找名为themeResolver的bean,
以确定要使用哪个ThemeResolver实现。主题解析器的工作方式与LocaleResolver非常相似。
它能够检测特定请求应使用的主题,也可以修改请求的主题。下表描述了Spring提供的主题解析器:
| 类 | <description> </description> |
|---|---|
|
通过使用 |
|
主题保存在用户的 HTTP 会话中。每个会话只需设置一次,但在不同会话之间不会被持久化。 |
|
所选主题存储在客户端的 Cookie 中。 |
Spring 还提供了一个 ThemeChangeInterceptor,它允许通过一个简单的请求参数在每次请求时更改主题。