您的位置:首页 > 编程语言 > Java开发

Spring MVC中使用国际化和主题

2016-03-18 00:00 537 查看
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.css
background=/themes/cool/img/coolbg.jpg

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

3ff8
jsp中可以使用spring:theme标签

<link rel="stylesheet" href="<spring:theme code='styleSheet'>" type="text/css" />
...
<body style="background=<spring:theme code='background' />">
...


使用主题

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

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

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

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

Spring也提供了ThemeChangeInterceptor来为每个请求改变主题,通过一个简单的请求参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring MVC 国际化 主题