1、themes概述
你可以使用Spring Web MVC框架的整体外观主题设定你的应用程序,从而提高用户体验。一个theme是静态资源的集合,通常样式表和图片,影响应用程序的视觉风格。
2、定义themes
要在你的web应用程序中使用的主题,必须建立一个实现org.springframework.ui.context.ThemeSource
接口。这个WebApplicationContext
接口扩展ThemeSource
但将责任委托给专门的实现。默认代理实现是org.springframework.ui.context.support.ResourceBundleThemeSource
,它负责加载定义在classpath根据目录下properties文件。你也可以自定义ThemeSource
实现或者配置ResourceBundleThemeSource
的basenamePrefix属性。你可以在application context通过name为themeSource
来注册ThemeSource这个bean.web应用程序上下文自动检测一个bean的名称和使用它。
当使用ResourceBundleThemeSource
,主题可以一个简单的属性文件中定义。属性文件列表的资源构成了主题.这里有一个例子:
styleSheet=/themes/cool/style.css
background=/themes/cool/img/coolBg.jpg
properties的key值是页面代码引用主题元素的名称。对于一个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
使用一个空的基本名称前缀。这样的话就会加载classpath根目录下的properties文件。因此,你将cool.properties
主题属性定义在类路径的根目录,例如在/WEB-INF/classes
。ResourceBundleThemeSourceuses
使用标准Java资源包加载机制,允许全面国际化的主题。例如我们能够使用/WEB-INF/classes/cool_nl.properties
引用一个特殊的背景图像与荷兰文字。
3、Theme解析
当你按照上个章节定义theme,你决定使用哪个theme。DispatcherServlet
会寻找一个叫themeResolver
的bean来找出使用ThemeResolver
实现。theme解析器几乎和LocaleResolver
解析器以相同的方式工作。它检测到的主题使用特定的请求并且可以改变请求的主题。下面是Spring提供的theme解析器:
Table. ThemeResolver implementations
Class | Description |
---|---|
FixedThemeResolver | 通过设置defaultThemeName 属性,选择确定的theme |
SessionThemeResolver | 主题是保存在用户的HTTP会话。它只需要为每个会话设置一次,但不同的会话不会持续 |
CookieThemeResolve | 选择储存在客户端的cookie中的theme |
Spring同样提供ThemeChangeInterceptor
允许通过对每个请求添加一个简单的请求参数来改变主题.
因为水平有限,翻译不足之处还望见谅。
原文地址:spring-framework-reference-4.2.6.RELEASE