对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
主题
您可以应用 Spring Web MVC 框架主题来设置 应用程序,从而增强用户体验。主题是 static 的集合 资源(通常是样式表和图像),这些资源会影响 应用。
从 6.0 开始,对 themes 的支持已被弃用,以支持使用 CSS, 并且在服务器端没有任何特殊支持。 |
定义主题
要在 Web 应用程序中使用主题,您必须设置org.springframework.ui.context.ThemeSource
接口。这WebApplicationContext
接口扩展ThemeSource
而是将其职责委托给专用的
实现。默认情况下,委托是一个org.springframework.ui.context.support.ResourceBundleThemeSource
实现
从 Classpath 的根目录加载属性文件。使用自定义ThemeSource
实现,或者配置ResourceBundleThemeSource
,
您可以在应用程序上下文中使用保留名称themeSource
.
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
使用空的 base name 前缀。因此,
属性文件是从 Classpath 的根目录加载的。因此,您将cool.properties
theme 定义(对于
示例,在/WEB-INF/classes
).这ResourceBundleThemeSource
使用标准的 Java
Resource Bundle 加载机制,允许主题完全国际化。为
例如,我们可以有一个/WEB-INF/classes/cool_nl.properties
引用一个特殊的
带有荷兰语文本的背景图像。
解决主题
定义主题后,如上一节所述,
您可以决定使用哪个主题。这DispatcherServlet
查找名为themeResolver
了解具体ThemeResolver
implementation 来使用。主题解析程序的工作方式大致相同
方式作为LocaleResolver
.它检测要用于特定请求的主题,还可以
更改请求的主题。下表描述了 Spring 提供的主题解析程序:
类 | 描述 |
---|---|
|
选择固定主题,使用 |
|
主题在用户的 HTTP 会话中维护。它只需要为 每个会话,但不会在会话之间保留。 |
|
所选主题存储在客户端上的 Cookie 中。 |
Spring 还提供了一个ThemeChangeInterceptor
这允许主题在每个
request 替换为简单的请求参数。