Spring MVC中使用国际化和主题

原创
2016/03/18 00:42
阅读数 130

        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资源绑定加载机制,允许完整的主题国际化。

        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来为每个请求改变主题,通过一个简单的请求参数。

                


展开阅读全文
打赏
1
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部