如何使用spring mvc 主题

主题是一组静态资源的集合,一般包括影响应用程序界面样式的资源,如样式表和图像文件。本文详细说明使用 Spring MVC 的主题实现不同风格切换。

配置Spring MVC 主题

在spring web 应用中使用主题,需要配置一个实现org.springframework.ui.context.ThemeSource接口的类,这里我们使用org.springframework.ui.context.support.ResourceBundleThemeSource类实现从根类路径载入属性文件。

当使用ResourceBundleThemeSource,在一个简单属性文件中定义主题。属性文件列出所有组成该主题的资源。示例如下:

styleSheet=/themes/wood.css

所有属性的key在视图代码(如jsp)中作为主题元素的名称被引用。在jsp中,使用spring:theme标签,下面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>...< /body>
< /html>

配置ResourceBundleThemeSource bean
在bean定义文件中配置ResourceBundleThemeSource bean。

< bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource">< property name="basenamePrefix" value="theme-" />
< /bean>

注意,我们已经设置了前缀属性”theme-“,缺省ResourceBundleThemeSource使用空名称作为前缀。
所以属性文件应该被命名为theme-filename.properties,如:theme-wood.properties, theme-pentagon.properties etc.

主题解释器

定义了主题之后,ThemeResolver实现决定主题如何使用。spring提供不同的解释器,举例:FixedThemeResolver, SessionThemeResolver, CookieThemeResolver.

本例中我们使用CookieThemeResolver 类实现,选择的主题被存储在客户端cookie中。

配置主题解释器:

< bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver">< property name="defaultThemeName" value="wood" />
< /bean>

注意:我们设置了缺省的主题:wood,所以当用户第一次访问web应用,wood主题有效。

主题拦截器
为了允许用户通过点击切换主题,spring提供ThemeChangeInterceptor,下面是ThemeChangeInterceptor的配置定义:

< bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">< property name="paramName" value="theme" />
< /bean>

我们已经指定paramName的值为theme,意味着当请求带参数theme用不同的值时,ThemeChangeInterceptor将被执行。同时也需要配置ThemeChangeInterceptor bean,上面我们定义的拦截器,通过使用mvc:interceptors标签实现:

< mvc:interceptors>< ref bean="themeChangeInterceptor">< /ref>
< /mvc:interceptors>

项目结构
这里是eclipse中项目结构快照:

src文件夹下theme-pentagon.properties文件内容如下:

styleSheet=themes/pentagon.css

只有一行,定义了获得相应css文件的url,其他属性文件类似,如:theme-symphony, theme-wood, theme-wall.
美特属性文件只有一行引用css文件的url。

所以,无论什么时候ThemeChangeInterceptor 拦截到主题改变时,都能找到相应的属性文件,并尝试访问属性文件中url指定的对应css文件。

因为所有的主题(css文件)都在resources/themes文件夹下,我们必须配置themes/css-filename给所有的resources/themes/css-filename,否则属性文件将不能定位至css文件。我们通过下面语句进行配置:

< mvc:resources mapping="/themes/**" location="/resources/themes/">< /mvc:resources>

wood.css

在wood.css文件中,我们仅改变body标签的背景图片,但实际你可以做更多的样式改变,如文字样式、字体、颜色等。

body { background-image : url(“/Themes/images/wood_pattern.png”);
}

HomeController
我们有一个简单HomeController 服务home.jsp.

@Controller
public class HomeController {@RequestMapping("/")public String getHomePage(){return "home";}
}

启动主题应用
现在,我们全部启动主题应用,运行过程中,可以看到home.jsp页面使用缺省的wood风格。

我们通过点击主页右侧的主题链接浏览其他主题。

Wall Theme

Pentagon Theme

注意:点击不同主题链接观察url改变点击一个主题链接,举例wood,请求参数主题带wood值,发送至服务器端。ThemeChangeInterceptor 拦截主题改变,并展示相应主题。

关于主题的一些坑

有几点坑需要了解:

确保属性文件子啊类路径下,应该把属性文件放在src文件夹下,如果属性文件不在类路径下,会报ServletException,没有相应的样式表本地化文件:

第二需要注意在属性文件中链接至CSS的url,我们之前提及的url,hemes/css-file-name是未来查找主题文件。必要忘了映射这个url到css文件的实际位置。使用mvc:resources,我们在示例中配置为.如果没有配置,不会有错误信息,但主题不能访问css文件。

最后一个错误是,使用spring主题时,jsp文件中不使用spring:theme标签。注意我们在jsp文件中使用spring:theme,” type=”text/css”/>,正确使用这个标签让主题正常工作。


本文来自 neweastsun 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/neweastsun/article/details/79213867?utm_source=copy

Spring MVC 之 DispatcherServlet之主题相关推荐

  1. Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事

    如果您使用过Spring MVC,那么您应该知道什么是DispatcherServlet? 它实际上是Spring MVC的心脏,确切地说是MVC设计模式或控制器的C语言. 应该由Spring MVC ...

  2. spring mvc 入门DispatcherServlet转发

    目录 一,配置相关 二,java类测试 三,测试 一,配置相关 maven坐标依赖 <dependencies><!-- spring context --><depen ...

  3. Spring mvc 中 DispatcherServlet 的学习和理解

    上图表示当客户请求来到时,spring架构作出响应的流程,可以从图中看到看到请求分发的中心就是 DispatcherServlet 类,DispatcherServlet的任务是将请求发送给Sprin ...

  4. Spring MVC 原理 - DispatcherServlet调用完整过程

    本篇主要讲解了Spring mvc的调用过程,通过这个过程来了解Spring的原理. 进入web.xml中配置的Spring拦截(调度)器: 调用堆栈信息: 开始拦截,这一步主要是根据request获 ...

  5. Spring MVC中DispatcherServlet理解总结(1)

    DispatcherServlet在web.xml中的配置 <context-param><!--默认配置文件为/WEB-INF/[servlet名字]-servlet.xml--& ...

  6. Spring MVC之DispatcherServlet请求处理(二)

    回顾一下DispatcherServlet中doDispatch的处理流程 /*** Process the actual dispatching to the handler.* <p> ...

  7. Spring MVC 原理探秘 - 一个请求的旅行过程

    1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...

  8. Spring 系列,第 3 部分: 进入 Spring MVC

    在 Spring 系列 的第 3 部分中,我介绍 Spring MVC 框架.就像在以前的文章中一样,我用银行示例介绍如何建模和构建简单的应用程序.示例应用程序包含了已经学过的一些技术(例如依赖注入) ...

  9. Spring MVC中@RequestParam和@PathVariable批注之间的区别?

    Spring MVC框架是在Java世界中开发Web应用程序最流行的框架之一,它还提供了一些有用的注释,可以从传入的请求中提取数据并将请求映射到控制器,例如@ RequestMapping,@ Req ...

最新文章

  1. Android studio Day02-1
  2. 贝叶斯机器学习:经典模型与代码实现!
  3. kotlin的Delegates与lateinit对比
  4. Junit4常用注解
  5. Ubuntu之SVN客户端安装+使用
  6. 开源RefreshListView下拉刷新效果
  7. 一文搞定 Hive 表分隔符
  8. c语言程序优化设计,C程序设计语言的教学策略优化设计
  9. 全网首发:解决办法:shmget()一直失败,errno=-22
  10. wlan 网速测试软件,WiFi大师网速测试
  11. smarty3中文手册
  12. mysql每次查询加流水号_通过SQL自动添加流水号
  13. 企业邮箱服务器如何设置?
  14. HTML小游戏8 —— 小霸王游戏机网页版(附完整源码)
  15. 《人人都能玩赚ChatGPT》:一份简明易懂的 ChatGPT 技术指南
  16. 【干货】PCB线宽与电流关系
  17. xcopy忽略错误复制文件夹并排除某个文件夹的名称
  18. NSRunLoop的用法
  19. 数据库课程设计--淘宝购物订单系统
  20. 李宏毅HW01——新冠疫情数据的预测

热门文章

  1. vscode 自定义字体样式_vscode md样式自定义
  2. android开发EditText的Hint字体默认样式和下载字体样式的适配问题。
  3. 思科路由器IOS备份和恢复
  4. 使用 Docker 运行微信 PC 客户端
  5. iOS基础:【屏幕成像与卡顿】屏幕撕裂 Screen Tearing、 掉帧 Jank、三缓冲 Triple Buffering
  6. 如何使丑陋的Arial看起来好看
  7. 2020年12月统考练习题
  8. 待到凤凰花开季,惟愿前程皆似锦
  9. sumo交通流仿真软件的使用说明
  10. Junit Test a getter