http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-themeresolver

做了一个小demo,放到了码云上,点我

1、概览

你可以应用Spring Web MVC框架themes来为你的应用设置全局的外观。

一个theme就是静态资源的一个集合 -- 通常是css和图片,会影响应用的视觉样式。

2、定义themes

想在你的web应用中使用这些themes,你必须设置 org.springframework.ui.context.ThemeSource 的一个实现。WebApplicationContext接口扩展了ThemeSource,但委托它的责任到指定的实现。 默认,该委托会是一个 org.springframework.ui.context.support.ResourceBundleThemeSource 实现,该实现从classpath的根路径加载properties文件。 想要使用一个自定义的ThemeSource实现或者想要配置ResourceBundleThemeSource的base name prefix,你可以住一个bean -- 使用保留名themeSource。web应用context会自动探测并使用它。

当使用ResourceBundleThemeSource时,theme是被定义在一个简单的properties文件中。该properties文件列出了组成该theme的资源。例如:

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

properties的keys是view code 中指向主题元素的名字。对一个JSP来说,你可以使用 “spring:theme”自定义标签来完成 -- 非常类似于”spring:message”标签。 下面的JSP片段使用了前面定义的theme:

<%@ 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的根路径来加载properties文件。所以,你可以将”cool.properties”主题定义文件放在classpath的根路径下,例如,在”/WEB-INF/classes”中。 ResourceBundleThemeSource会使用标准的Java resource bundle加载机制,允许主题的国际化。 例如,”/WEB-INF/classes/cool_nl.properties”,会引用Dutch文字。

3、theme resolvers

当你定义了themes,你需要决定使用哪个theme。DispatcherServlet 会查找bean themeResolver以找出使用哪个ThemeResolver实现。 theme resolver的工作方式非常类似于LocaleResolver。 它会探测用于某个request的theme,也可以更改该request的theme。 下面是Spring提供的theme resolvers :

Table 22.5. ThemeResolver implementations

Class Description

FixedThemeResolver

Selects a fixed theme, set using the defaultThemeName property.

SessionThemeResolver

The theme is maintained in the user’s HTTP session. It only needs to be set once for each session, but is not persisted between sessions.

CookieThemeResolver

The selected theme is stored in a cookie on the client.

Spring还提供了一个 ThemeChangeInterceptor,允许request使用一个简单的parameter来改变使用的theme。 -- 看起来类似于LocaleChangeInterceptor。

Spring 4 官方文档学习(十一)Web MVC 框架之themes的更多相关文章

  1. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

  2. Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

    接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...

  3. Spring 4 官方文档学习(十一)Web MVC 框架

    介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...

  4. Spring 4 官方文档学习(十二)View技术

    关键词:view technology.template.template engine.markup.内容较多,按需查用即可. 介绍 Thymeleaf Groovy Markup Template ...

  5. Spring Boot 官方文档学习(一)入门及使用

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  6. Spring boot官方文档学习(一)

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  7. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)

    接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...

  8. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

    本篇太乱,请移步: Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 写了删删了写,反复几次,对自己的描述很不 ...

  9. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)

    题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...

  10. Spring 4 官方文档学习(十一)Web MVC 框架之编码式Servlet容器初始化

    在Servlet 3.0+ 环境中,你可以编码式配置Servlet容器,用来代替或者结合 web.xml文件.下面是注册DispatcherServlet : import org.springfra ...

随机推荐

  1. spring中事务配置

    1 如果在方法.类.接口上使用注解的方式声明事务,需要在配置文件中进行配置,以便通知 Spring 容器对标注 @Transactional 注解的 bean 加工处理. 首先需要引入 tx 命名空间 ...

  2. 权限管理系统(一):权限系统与RBAC模型概述

    RBAC模型概述 RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构 ...

  3. OSGi中的ServletContext

    在OSGi中,不能的bundle分属不同的装载器(Class Loader), 在J2EE 应用中,不同BUNDLE 中的JSP 所相应的ServletContext对象不同,这与通常情况下的应用是不 ...

  4. cocos2d-x分别在Visual Studio和eclipse中设置启用Box2D

    cocos2d-x内嵌有chipmunk和Box2D两个物理库,默认启用的是chipmunk.如果想使用Box2D,可做如下设置.PS:本人所用的版本是cocos2d-x-2.2.5. 一.在Visu ...

  5. Spark Streaming使用Kafka保证数据零丢失

    来自: https://community.qingcloud.com/topic/344/spark-streaming使用kafka保证数据零丢失 spark streaming从1.2开始提供了 ...

  6. electron-vue 项目搭建的地址

    https://simulatedgreg.gitbooks.io/electron-vue/content/en/ 现在的网址:vue的electron的文件: https://github.com ...

  7. NAND FLASH驱动程序

    NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线,     怎么 ...

  8. navicat编辑记录 (zhuan)

    https://www.navicat.com.cn/manual/online_manual/cn/navicat/linux_manual/EditRecord.html ************ ...

  9. js 中object对象的操作

    n = object对象 for(var p in n){ console.log(p);// 取得是key值 console.log(n[p]);//取得是value值 } 继之前js中数组的常用方 ...

  10. 修改主机名hostname

    关于修改linux hostname的问题,尤其是redhat 7修改hostname的方式 2017年03月29日 13:56:45 阅读数:4989 首先强调一点,不同的系统,或者同一个系统的不同 ...