15.Spring MVC主题(ThemeSource)

目录


Spring MVC专栏目录(点击进入…)


Spring MVC主题(ThemeSource)


主题

可以使用Spring Web MVC框架提供的主题来为整站的应用设置皮肤/主题(look-and-feel),这可以提高用户体验。

主题:是指一系列静态资源的集合,并且主要是样式表和图片,它们决定了应用的视觉风格。


定义主题

在使用主题,必须实现一个org.springframework.ui.context.ThemeSource接口。WebApplicationContext接口继承了ThemeSource接口,但主要的工作它还是委托给接口具体的实现来完成。

默认的实现是org.springframework.ui.context.support.ResourceBundleThemeSource,它会从classpath的根路径下去加载配置文件。如果需要定制ThemeSource的实现,或要配置ResourceBundleThemeSource的基本前缀名(base name prefix),可以在应用上下文(application context)下注册一个名字为保留名themeSource的bean,web应用的上下文会自动检测名字为themeSource的bean并使用它。

使用的是ResourceBundleThemeSource时,一个主题可以定义在一个简单的配置文件中。该配置文件会列出所有组成了该主题的资源。

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

属性的键(key)是主题元素在视图代码中被引用的名字。对于JSP视图来说,一般通过spring:theme这个定制化的标签(tag)来做,它与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 prefix)是空值。也即是说,配置文件是从根classpath路径下加载的。因此,你需要把主题的定义文件cool.properties放在classpath的根路径目录下,比如,/WEB-INF/classes。ResourceBundleThemeSource采用了Java的标准资源bundle加载机制,完全支持国际化主题。比如,你可以创建一个/WEB-INF/classes/cool_nl.properties配置文件,并在其中引用一副有荷兰文的背景图片


主题解析器

定义之后,要决定使用哪个主题。DispatcherServlet会查找一个名称为themeResolver的bean以确定使用哪个ThemeResolver的实现。主题解析器的工作原理与地区解析器LocaleResolver的工作原理大同小异。它会检测,对于一个请求来说,应该使用哪个主题,同时它也可以修改一个请求所应应用的主题

Spring提供了下列的这些主题解析器:ThemeResolver接口的实现

类名描述
FixedThemeResolver选择一个固定的主题,这是通过设置defaultThemeName这个属性值实现的
SessionThemeResolver请求相关的主题保存在用户的HTTP会话(session)中。对于每个会话来说,它只需要被设置一次,但它不能在会话之间保存
CookieThemeResolver选中的主题被保存在客户端的cookie中

Spring也提供了一个主题更改拦截器ThemeChangeInterceptor,以支持主题的更换。这很容易做到,只需要在请求中携带一个简单的请求参数即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值