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`(主题)的支持是构建国际化和个性化用户界面的关键部分。这篇学习笔记将深入探讨这两个概念及其在实际开发中的应用。 1. **Locale(地区设置)支持** - `...
- SpringMVC 提供了 i18n 国际化和 theme 主题支持,便于创建多语言和多主题的网站。 13. **RESTful 风格的支持** - SpringMVC 支持创建 RESTful 风格的 Web 服务,通过 HTTP 方法(GET、POST、PUT、DELETE)来...
9. **国际化与主题支持**:SpringMVC提供了i18n(国际化)和theme(主题)的支持,可以根据用户的选择或系统设置来显示不同语言或主题的页面。 10. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,...
Spring Web MVC是一种基于Java的实现了...支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。
- SpringMVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等,视图解析器会根据配置选择合适的视图技术。 - 视图名称通常是一个逻辑名称,由视图解析器转换为实际的视图路径。 6. **拦截器(Interceptor)**:...
在实际开发中,Spring MVC 还提供了许多高级特性,如拦截器(Interceptor)、异常处理、本地化、主题(Theme)等,使得开发者能够构建更复杂、更灵活的 Web 应用程序。此外,Spring MVC 与 Spring 框架的其他模块如 ...
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动...支持本地化(Locale)解析、主题(Theme)解析及文件上传等;
9. **本地化与主题支持**:SpringMVC可以处理多语言和主题,通过设置请求中的Locale和Theme信息,为用户提供定制化的显示效果。 10. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局处理...
- 主题(Theme):支持多主题切换,改变页面样式。 8. **RESTful API支持** - 使用@RequestMapping注解配合HTTP动词(GET, POST, PUT, DELETE等),构建RESTful服务。 9. **测试** - 使用MockMVC进行控制器的...
SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。...随着对SpringMVC的深入理解,你将能够构建更加复杂的Web应用。在实践中,不断尝试和优化,逐步提升你的Web开发技能。
Spring MVC 提供了 Internationalization(i18n)和 Theme 功能,可以根据用户选择的语言和主题显示相应的视图。 11. **异常处理**: 通过 @ExceptionHandler 注解,开发者可以自定义异常处理器,优雅地处理程序...
6. **主题(Theme)**:主题允许用户根据个人喜好选择不同的界面样式。在Web应用中,这通常通过更换CSS样式表来实现。本示例可能提供了多个CSS主题文件,用户可以在应用中切换,改变界面的视觉效果。 在实际的`WEB-...
还有国际化(i18n)和主题(theme)支持,使你的应用更具扩展性和适应性。 总之,"springmvc入门实例"是一个很好的起点,它将引导你进入Spring MVC的世界,帮助你掌握Web开发中的核心概念和技术。通过实践这个项目...
5. **本地化和主题支持**:可以根据用户请求的 Locale 和 Theme 进行定制化显示。 6. **支持RESTful风格**:可以轻松构建符合REST原则的Web服务。 **学习资源** 在了解了Spring MVC的基本概念和工作流程后,你可以...
- 主题(Theme)允许切换不同的样式表或页面布局。 8. **上传下载** - 使用`CommonsMultipartFile`处理文件上传。 - 通过流处理实现大文件下载。 9. **RESTful API设计** - 利用注解驱动开发,轻松创建符合...
SpringMVC的核心组件是DispatcherServlet,它作为前端控制器接收HTTP请求,并根据请求信息选择合适的处理器进行处理。DispatcherServlet会查找映射到请求的HandlerMapping,然后通过HandlerAdapter执行处理方法。 ...
8. **国际化(i18n)与主题(Theme)**:Spring MVC 支持应用程序的国际化和主题切换,可以根据用户的语言环境和偏好显示不同的内容。 9. **RESTful 风格的 URL**:通过 `@RequestMapping` 注解的参数设置,可以...
- ThemeSupport和ThemeResolver支持主题切换。 8. **RESTful风格**: - Spring MVC支持创建RESTful API,通过HTTP动词(GET、POST、PUT、DELETE)和URI资源表示操作。 9. **异步处理**: - 使用`@Async`注解...
Spring MVC提供对多语言环境的支持,通过LocaleResolver和MessageSource实现国际化。主题(Theme)功能则允许应用具有多套外观和风格。 十、MVC测试 Spring 3.0提供模拟HTTP请求的MockMvc工具,方便进行单元测试和...
4. **本地化和主题支持**:能够根据用户设置的locale和theme提供个性化的页面显示。 5. **处理器链**:通过HandlerAdapter,可以支持多种类型的处理器,比如Controller接口的实现或普通的POJO类。 接下来,我们简要...