此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

主题

您可以应用 Spring Web MVC 框架主题来设置应用程序的整体外观和感觉,从而增强用户体验。主题是静态资源的集合,通常是样式表和图像,它们会影响 应用。spring-doc.cadn.net.cn

从 6.0 开始,对主题的支持已被弃用,转而使用 CSS,并且在服务器端没有任何特殊支持。

定义主题

要在 Web 应用程序中使用主题,您必须设置org.springframework.ui.context.ThemeSource接口。 这WebApplicationContext接口扩展ThemeSource但将其职责委托给专门的 实现。 默认情况下,委托是org.springframework.ui.context.support.ResourceBundleThemeSource实现,该从类路径的根目录加载属性文件。要使用自定义ThemeSource实现或配置ResourceBundleThemeSource, 您可以在应用程序上下文中使用保留名称themeSource. Web 应用程序上下文会自动检测具有该名称的 Bean 并使用它。spring-doc.cadn.net.cn

当您使用ResourceBundleThemeSource,主题在简单的属性中定义 文件。 属性文件列出了构成主题的资源,如以下示例所示:spring-doc.cadn.net.cn

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

属性的键是引用视图中主题元素的名称 法典。 对于 JSP,通常使用spring:themecustom 标签,即与spring:message标记。 以下 JSP 片段使用主题定义在上一个示例中自定义外观:spring-doc.cadn.net.cn

<%@ 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引用一个特殊的带有荷兰语文本的背景图像。spring-doc.cadn.net.cn

解决主题

定义主题后,如上一节所述,您可以决定使用哪个主题。 这DispatcherServlet查找名为themeResolver找出哪个ThemeResolver实现来使用。主题解析器的工作方式与方式大致相同LocaleResolver. 它检测用于特定请求的主题,还可以更改请求的主题。下表描述了 Spring 提供的主题解析器:spring-doc.cadn.net.cn

表 1.ThemeResolver 实现
描述

FixedThemeResolverspring-doc.cadn.net.cn

选择一个固定主题,使用defaultThemeName财产。spring-doc.cadn.net.cn

SessionThemeResolverspring-doc.cadn.net.cn

主题在用户的 HTTP 会话中维护。它只需要为每个会话设置一次,但不会在会话之间持久化。spring-doc.cadn.net.cn

CookieThemeResolverspring-doc.cadn.net.cn

所选主题存储在客户端的 cookie 中。spring-doc.cadn.net.cn

Spring 还提供了一个ThemeChangeInterceptor允许每个request 的主题更改,并带有一个简单的请求参数。spring-doc.cadn.net.cn