`
234390216
  • 浏览: 10232281 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462597
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775466
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398309
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394995
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679961
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530847
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183872
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467787
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151371
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68129
社区版块
存档分类
最新评论

SpringMVC对theme选择的支持

阅读更多

theme选择

一组主题通常是一组CSS和图片的组合,比如网址导航网站常见的以颜色区分的主题。SpringMVC提供了对主题的支持,由org.springframework.ui.context.Theme表示。Theme由ThemeResource来根据theme名称来解析出来,它的定义如下。

public interface ThemeSource {

	Theme getTheme(String themeName);

}

Spring提供的实现是ResourceBundleThemeSource,它是基于java.util.ResourceBundle实现的,在使用时我们需要可以通过basenamePrefix指定一个前缀,当没有指定前缀时将从类的根路径下来获取主题文件。指定了前缀后就将从类路径下的指定路径下寻找,比如前缀为a/b则将从类路径下的a/b路径下寻找指定的主题文件。ResourceBundleThemeSource解析的主题文件需要是properties文件。当需要解析主题时Spring将从bean容器中寻找id为themeSource的ThemeSource。以下就是一个ResourceBundleThemeSource的定义。

<bean id="themeSource"
    class="org.springframework.ui.context.support.ResourceBundleThemeSource"
    p:basenamePrefix="META-INF/theme/" />

ThemeSource解析Theme时的主题名称将由ThemeResolver来解析,它有三个实现:

  • FixedThemeResolver: 指定固定的主题名称。
  • SessionThemeResolver:从Session中解析主题名称。
  • CookieThemeResolver:从Cookie中解析主题名称。

它们三个都可以通过setDefaultThemeName指定默认的theme名称。即当从Session或Cookie中没能获取到主题名称时都将使用setDefaultThemeName指定的默认的主题名称。当没有通过setDefaultThemeName指定默认的主题名称时,默认的主题名称是theme。以下就是定义的一个基于Session的ThemeResolver。有需要时也可以实现自定义的。

<!-- 默认不指定默认的theme名称时,默认的theme名称是theme -->
<bean id="themeResolver"
    class="org.springframework.web.servlet.theme.SessionThemeResolver"
    p:defaultThemeName="default" />

定义好ThemeSource和ThemeResolver之后我们就可以来应用Theme了。首先我们需要在jsp页面上引入spring的taglib。

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

然后就可以通过<spring:theme code='style'/>的形式来引用当前theme定义中的stylezhegekey对应的资源了。它的用法和作用与国际化的<spring:message code=""/>是类似的。比如下面示例中的<link rel="stylesheet" type="text/css" href="<spring:theme code='style'/>">就会寻找当前theme中的style这个key对应的资源并把它作为一个css文件的路径进行引入。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="<spring:theme code='style'/>">

<title>Test Theme Function</title>
</head>
<body>

    <div style="width: 200px;height: 150px; margin-top: 100px; margin-left: 100px; border-width: 1px; border-style: solid;">
        Test Theme;
    </div>

</body>
</html>

此时,如果没有指定theme,按照我们上面的配置默认就会取名称为default的theme,此时将到类路径的META-INF/theme路径下寻找default.properties文件。如果default.properties文件的内容如下,则此时key为style的值对应的是/static/style/theme/default.css,则此时<link rel="stylesheet" type="text/css" href="<spring:theme code='style'/>">对应的就是<link rel="stylesheet" type="text/css" href="/static/style/theme/default.css">

style=/static/style/theme/default.css

如果解析出来的theme的名称是green,则将从类路径下的META-INF/theme路径下寻找green.properties文件中key为style的值。

需要注意的是每个theme中对应的key应该都是相同的,如果在当前theme中寻找某个不存在的key时,将直接抛出异常,而不会到默认的theme对应的文件中寻找。这是它跟国际化不同的地方。

切换theme

如果需要响应theme的切换,需要在拦截器中定义一个ThemeChangeInterceptor,这是SpringMVC内置的一个interceptor。定义了该interceptor之后就可以通过在URL上传递一个名为theme的参数用以指定当前需要使用的theme,具体需要拦截哪个URL以响应theme的切换则完全可以由你来决定,笔者下面这样的就是拦截所有的URL。如果不想使用默认的参数,则可以通过ThemeChangeInterceptor的setParamName()方法用来指定。使用默认的切换参数时就可以通过http://localhost/xxx?theme=green来切换当前的theme为green。

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
</mvc:interceptors>

(注:本文是基于Spring4.1.0所写)

分享到:
评论

相关推荐

    Spring MVC 学习笔记 十四 对locale和theme的支持

    在Spring MVC框架中,对`locale`(地区设置)和`theme`(主题)的支持是构建国际化和个性化用户界面的关键部分。这篇学习笔记将深入探讨这两个概念及其在实际开发中的应用。 1. **Locale(地区设置)支持** - `...

    SpringMVC 入门教程.pdf

    - SpringMVC 提供了 i18n 国际化和 theme 主题支持,便于创建多语言和多主题的网站。 13. **RESTful 风格的支持** - SpringMVC 支持创建 RESTful 风格的 Web 服务,通过 HTTP 方法(GET、POST、PUT、DELETE)来...

    SpringMVC入门案例源码

    9. **国际化与主题支持**:SpringMVC提供了i18n(国际化)和theme(主题)的支持,可以根据用户的选择或系统设置来显示不同语言或主题的页面。 10. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,...

    springmvc demo

    Spring Web MVC是一种基于Java的实现了...支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。

    SpringMVC个人学习代码

    - SpringMVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等,视图解析器会根据配置选择合适的视图技术。 - 视图名称通常是一个逻辑名称,由视图解析器转换为实际的视图路径。 6. **拦截器(Interceptor)**:...

    springMVC课件.doc

    在实际开发中,Spring MVC 还提供了许多高级特性,如拦截器(Interceptor)、异常处理、本地化、主题(Theme)等,使得开发者能够构建更复杂、更灵活的 Web 应用程序。此外,Spring MVC 与 Spring 框架的其他模块如 ...

    SpringMvc源码

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动...支持本地化(Locale)解析、主题(Theme)解析及文件上传等;

    SpringMVC 3.8

    9. **本地化与主题支持**:SpringMVC可以处理多语言和主题,通过设置请求中的Locale和Theme信息,为用户提供定制化的显示效果。 10. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局处理...

    一个项目 了解springMVC 基本用法

    - 主题(Theme):支持多主题切换,改变页面样式。 8. **RESTful API支持** - 使用@RequestMapping注解配合HTTP动词(GET, POST, PUT, DELETE等),构建RESTful服务。 9. **测试** - 使用MockMVC进行控制器的...

    SpringMVC入门项目

    SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。...随着对SpringMVC的深入理解,你将能够构建更加复杂的Web应用。在实践中,不断尝试和优化,逐步提升你的Web开发技能。

    springmvc相关jar包

    Spring MVC 提供了 Internationalization(i18n)和 Theme 功能,可以根据用户选择的语言和主题显示相应的视图。 11. **异常处理**: 通过 @ExceptionHandler 注解,开发者可以自定义异常处理器,优雅地处理程序...

    整合springmvc、mybatis、redis、shiro

    6. **主题(Theme)**:主题允许用户根据个人喜好选择不同的界面样式。在Web应用中,这通常通过更换CSS样式表来实现。本示例可能提供了多个CSS主题文件,用户可以在应用中切换,改变界面的视觉效果。 在实际的`WEB-...

    springmvc入门实例

    还有国际化(i18n)和主题(theme)支持,使你的应用更具扩展性和适应性。 总之,"springmvc入门实例"是一个很好的起点,它将引导你进入Spring MVC的世界,帮助你掌握Web开发中的核心概念和技术。通过实践这个项目...

    springMVC框架介绍

    5. **本地化和主题支持**:可以根据用户请求的 Locale 和 Theme 进行定制化显示。 6. **支持RESTful风格**:可以轻松构建符合REST原则的Web服务。 **学习资源** 在了解了Spring MVC的基本概念和工作流程后,你可以...

    SpringMVC.zip

    - 主题(Theme)允许切换不同的样式表或页面布局。 8. **上传下载** - 使用`CommonsMultipartFile`处理文件上传。 - 通过流处理实现大文件下载。 9. **RESTful API设计** - 利用注解驱动开发,轻松创建符合...

    源码及PPT.rar

    SpringMVC的核心组件是DispatcherServlet,它作为前端控制器接收HTTP请求,并根据请求信息选择合适的处理器进行处理。DispatcherServlet会查找映射到请求的HandlerMapping,然后通过HandlerAdapter执行处理方法。 ...

    使用Spring MVC框架 实现的云音乐网站.zip

    8. **国际化(i18n)与主题(Theme)**:Spring MVC 支持应用程序的国际化和主题切换,可以根据用户的语言环境和偏好显示不同的内容。 9. **RESTful 风格的 URL**:通过 `@RequestMapping` 注解的参数设置,可以...

    spring MVC基础学习

    - ThemeSupport和ThemeResolver支持主题切换。 8. **RESTful风格**: - Spring MVC支持创建RESTful API,通过HTTP动词(GET、POST、PUT、DELETE)和URI资源表示操作。 9. **异步处理**: - 使用`@Async`注解...

    spring3.0MVC 含jar包

    Spring MVC提供对多语言环境的支持,通过LocaleResolver和MessageSource实现国际化。主题(Theme)功能则允许应用具有多套外观和风格。 十、MVC测试 Spring 3.0提供模拟HTTP请求的MockMvc工具,方便进行单元测试和...

    一文带你搞懂Spring MVC和servlet(面试必备)

    4. **本地化和主题支持**:能够根据用户设置的locale和theme提供个性化的页面显示。 5. **处理器链**:通过HandlerAdapter,可以支持多种类型的处理器,比如Controller接口的实现或普通的POJO类。 接下来,我们简要...

Global site tag (gtag.js) - Google Analytics