文档章节

Spring Theme

Zuo_W
 Zuo_W
发布于 2013/12/17 16:44
字数 888
阅读 297
收藏 2

Spring Theme

足够简单,所以足够简洁。----sayi

Spring主题为系统提供了换肤的功能,通过session或者cookie来实现主题记忆,我们可以自己实现皮肤与用户关联,这通常需要数据存储来记忆主题了。下面我们一步步来实现一个完整的换肤功能,首先浏览一下我们大概需要解决哪些问题:

  1. 制作不同主题的样式文件、图片等资源
  2. 页面提供切换主题的功能
  3. 主题具有记忆功能
  4. 切换主题后,页面能使用到相应的主题资源文件

制作不同主题的样式文件、图片等资源

这部分很简单,在资源路径下为不同的样式建立不同的目录,制作不同的样式和图片,我们可以将共有的资源放在共有的目录下,比如如下的目录结构

    ----resource\
        -- |  common\
        -- |  theme\
             -- |  classic\
             -- |  green\
             -- |  orange\
             -- |  simple\

制作了这些资源文件之后,Spring需要我们定义这些资源,如同Spring对大多数资源的处理,在默认的目标的WEB-INF\classes下(这个目录当然可以配置,也可以放在任何打包后会编译到classes下的目录,如src)建立主题资源,我们取名称如下:theme-classic.properties、theme-orange.properties等等。里面内容即时一些key对应着资源的路径,这样在页面中就可以引用这些key了:

csssayi=resources/themes/classic/css/sayi.css
cssmain=resources/themes/classic/css/main.css
datepicker=resources/themes/classic/datePicker/WdatePicker.js
highcharts=resources/themes/classic/highcharts/js/highcharts.js

loading-icon=resources/themes/classic/images/loading.gif
jstree-icon=resources/themes/classic/images/treeicon.png

edit-png=resources/themes/classic/images/edit.png
del-png=resources/themes/classic/images/delete.png

页面提供切换主题的功能

Spring接受post或者get请求的以theme为默认名称(当然也可以配置这个名称)的参数,值即为主题名。如 theme=orange。页面切换的形式可以任意发挥,比如
在此输入图片描述

主题具有记忆功能

这节就接触到了Spring的主题配置,包括主题资源、主题解析器、主题改变拦截器等。如下配置了主题资源文件前缀和以cookie来记忆主题的解析器。

<!--?prettify lang=xml?-->

<bean id="themeSource"
        class="org.springframework.ui.context.support.ResourceBundleThemeSource">
            <property name="basenamePrefix" value="theme-" />
    </bean>
    <bean id="themeResolver"
        class="org.springframework.web.servlet.theme.CookieThemeResolver">
        <property name="cookieName" value="sayi-theme" />
        <property name="defaultThemeName" value="classic" />
</bean>

我们当然可以通过SessionThemeResolver、FixedThemeResolver来解析当前主题。下面这个拦截器主要就是拦截theme为参数的切换主题的请求,我们当然无需使用Spring这个拦截器,完全可以自己来处理切换主题到解析主题的变换。

<!--?prettify lang=xml?-->

<bean id="themeChangeInterceptor"
        class="com.wiscom.idstar.imp.common.theme.ThemeChangeInterceptor">
        <property name="paramName" value="theme" />
        <property name="themes">
            <list>
                <value>classic</value>
                <value>orange</value>
                <value>green</value>
                <value>simple</value>
            </list>     
        </property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <property name="interceptors">
            <ref bean="themeChangeInterceptor" />
        </property>
</bean>

切换主题后,页面能使用到相应的主题资源文件

为了使页面能够使用,如前文所说,我们就要使用到资源文件的key值了,引入spring标签,使用 spring:theme完成主题的引用,如下代码的href属性的值需要最终能定位到该资源。

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<link href='/<spring:theme code="csssayi" />' rel="stylesheet" type="text/css" />

总结

Spring主题无非是提供了一种获取不同资源文件的便捷切换、记忆方式。但是有时候在调试页面性能的时候会发现主题不能切换,如开启了cache-control、Last-modify等,这已不在本文的范畴。

© 著作权归作者所有

Zuo_W
粉丝 8
博文 23
码字总数 11094
作品 0
南京
程序员
私信 提问
使用Spring Mobile实现网站移动端适配及更换主题

现在的网站,很多都有需要动态更换主题风格的需求,比如每到特殊节日,更换为带有节日气氛的主题。还有用户通过手机端浏览器访问,如果没有做移动端的适配,你的网站基本也是没办法看的。本文...

jessehua
2018/08/17
0
0
Spring 官方文档第十六章笔记(2):DispatcherServlet

Spring 官方文档第十六章笔记(2):DispatcherServlet DispatcherServlet和Spring IOC容器集成在一起,所以可以使用Spring IOC容器的功能。 DispatcherServlet处理请求的过程如下:图中的F...

LiJIaming
2012/06/01
0
0
30 款免费的 Magento 电商软件主题

Magento是一套专业开源的PHP电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。 本文向你介绍 30 款免费的 Magento 主题,可以轻松改变...

oschina
2013/08/23
6.2K
12
yale cas 设置主题的一个bug?

cas 我通过自定义权限认证。 在查询用户权限时候如果此时我的数据库异常了抛出mybatis异常(我的只是部分sql异常,用户登录密码这个正常),则应该跳转到 view/jsp/errors.jsp 界面 界面中包...

wad12302
2012/12/10
0
0
spring boot theme无法启用

希望在spring boot 1.2.4 中加入ResourceBundleThemeSource管理主题资源, 成功启动后访问freemarker视图, 读取主题资源报错, 日志中看到, spring仅查找了messageSource而未查找themeSource, ...

scl33
2015/07/07
1K
8

没有更多内容

加载失败,请刷新页面

加载更多

访问LNMP虚拟主机出现报错:No input file specified.

之前一直是使用lnmp一键包,但是访问创建的虚拟主机,并没有出现过的错误:No input file specified. 网上的文章很多,但是都是转载,而且原因也很多,根本不适用 后面在lnmp一键包官网找到解...

wenzhizhong
21分钟前
1
0
OSChina 周三乱弹 —— 你还能管得住观众愿意看谁吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享李宗盛的单曲《凡人歌 (电视剧《碧海情天》主题曲)》:你我皆凡人,生在人世间#今日歌曲推荐# 《凡人歌 (电视剧《碧海情天》主...

小小编辑
45分钟前
292
11
Inf2Cat, signability test failed vc2019 wdk驱动sys build签名

解决问题的方法非常简单,只要让Inf2Cat验证的时候使用local时间就可以了。打开package工程的属性,在inf2cat工具的属性中进行设置。

simpower
今天
3
0
LinkedHashMap 是如何保证有序的?

//map的遍历方法如下 for (Map.Entry<String,Integer> entry : map.entrySet()) { System.out.println(entry.getKey()+":"+entry.getValue()); } HashMap#entry......

暗中观察
今天
3
0
Linux的基本命令

目录的操作命令(增删改查) 增: mkdir 目录名称; 查: ls 可以看到该目录下的所有的目录和文件 ls -a,可以看到该目录下的所有文件和目录,包括隐藏的 ls -l,可以看到该目录下的所有目录和...

凹凸凸
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部