博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC中使用国际化和主题
阅读量:7052 次
发布时间:2019-06-28

本文共 1656 字,大约阅读时间需要 5 分钟。

hot3.png

        Spring的大部分组件都支持国际化,Spring web MVC框架也是如此。DispatcherServlet能够使用客户端的本地化信息自动解析信息,而这是通过LocaleResolver对象完成的。

        当请求到来,DispatcherServlet会寻找一个locale resolver,如果找到,就使用它来设置本地化信息,你可以使用RequestContext.getLocale()方法获得这个本地化信息。除了自动的本地化解析,你还可以在特定情形下给handler mapping设置拦截器来改变本地化设置,比如基于一个请求参数。

        本地化解析器和拦截器定义在org.framework.web.servlet.i18n包下,使用普通的方式在应用上下文中配置即可。Spring中包含的本地化解析器有:

        AcceptHeaderLocaleResolver——它检查请求头中的accept-language信息(包含客户端操作系统的本地信息)

        CookieLocaleResolver——它检查客户端中可能存在的Cookie,看是否有本地化信息被指定,如有,就使用。你可以通过此本地化解析器的属性配置来cookie名和它的最大存活时间。

        SessionLocaleResolver——从会话中获取本地化信息。

        LocaleChangeInterceptor——通过给某个handler mapping设置LocaleChangeInterceptor就可以改变本地化信息。

        定义主题:主题是一些静态资源,如样式表和图片的集合。

        你必须要创建一个org.springframework.ui.context.ThemeSource接口的实现才能使用主题,WebApplicationContext接口继承ThemeSource但是它把这个责任委托给了一个专门的实现——ResourceBundleThemeSource。为了使用一个传统的ThemeSource实现或者配置ResourceBundleThemeSource的命名前缀,你可以通过在应用上下文中注册一个预置名为themeSource的bean。应用上下文自动探测以themeSource命名的bean并使用它。

        使用ResourceBundleThemeSource时,主题是被定义在一个简单的配置文件中的,配置文件中列出了标记这个主题的资源,如:

styleSheet=/themes/cool/style.cssbackground=/themes/cool/img/coolbg.jpg

        这些配置文件是从classpath的根目录加载的。ResourceBundleThemeSource使用标准的java资源绑定加载机制,允许完整的主题国际化。

        jsp中可以使用spring:theme标签

" type="text/css" />...
">...

        

        使用主题

        和LocaleResolver一样,ThemeResolver会为特定请求找到一个主题,也能修改这个主题。DispatcherServlet会寻找一个以“themeResolver”命名的bean作为ThemeResolver的实现。Spring提供了ThemeResolver的几个实现类:

        FixedThemeResolver——通过defaultThemeName属性来选择一个固定的主题

        SessionThemeResolver——主题被维护在用户的HTTP会话中,每个会话只需设置一次。

        CookieThemeResolver——被选中的主题存储在客户端的Cookie中。

        Spring也提供了ThemeChangeInterceptor来为每个请求改变主题,通过一个简单的请求参数。

                

转载于:https://my.oschina.net/volcode/blog/639687

你可能感兴趣的文章
UVa 679 Dropping Balls (例题 6-6)
查看>>
FileWriter写数据
查看>>
【Andorid X 项目笔记】TextView字幕效果(3)
查看>>
HDU 1002
查看>>
Codeforces Round #547 (Div. 3) A.Game 23
查看>>
Implement strStr()
查看>>
用Ruby批量获取电影的评分与影片信息
查看>>
练习markdown语法
查看>>
python 制作自定义包并安装到系统目录
查看>>
大文件排序问题
查看>>
php实现rar文件的读取和解压
查看>>
2014年天津市第一批科技计划项目
查看>>
@芥末的糖 ---------- node连接数据库两种方式mysql和moogoDB
查看>>
MongoDB 学习笔记2----条件操作符
查看>>
关于Hibernate5.x的那点事
查看>>
sk-learn 选择正确的估算器
查看>>
python操作mysql数据库
查看>>
erp的核心代码,替代orm
查看>>
字符串--manacher算法(回文串匹配)
查看>>
[LeetCode]: 242: Valid Anagram
查看>>