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

Spring4.x官方参考文档中文版——第21章 Web MVC框架(21)

2016-07-19 11:29 363 查看
21.8 地区(locale)的使用
       Spring的大多数架构都是支持国际化的,Spring MVC框架也是如此。DispatcherServlet允许你自动地使用客户端的地区来解析消息。这些操作是被LocaleResolver对象完成的。
       当一个请求到来时,DispatcherServlet会寻找一个地区解析器,如果能够找到的话,会尝试使用它来设置地区。通过使用RequestContext.getLocale()方法,那些被地区解析器解析过的地区,就能被检索到了。
       此外,对于自动化的地区解析,你同样可以在handler mapping(处理器映射)上绑定拦截器(详见”21.4.1 使用HandlerInterceptor拦截请求”,了解处理器映射拦截器的更多信息) 来在特定条件下改变地区。例如:基于在请求中的某个参数来拦截。
       地区解析器和拦截器是在org.springframework.web.servlet.i18n包中被定义的,并且它们可以通过在应用的context中进行配置。下面这些是Spring中可以选择的地区解析器。
 
21.8.1 获取时区信息
       为了获取客户端的地区,一般来说获取时区是很有用的。LocaleContextResolver接口提供了对于LocaleResolver的扩展,它允许解析器提供更多样的,包含时区信息的LocaleContext。
当他被启用时,用户的TimeZone对象能被RequestContext.getTImeZone()方法获取到。时区信息会自动地被Date/Time Converter对象和Formatter对象使用Spring的ConversionService进行注册。
 
21.8.2 AcceptHeaderLocaleResolver(accept报头地区解析器)
       这个地区解析器会检测从客户端发送(比如:一个web浏览器)的请求中的accept-language报头。一般来说,这个报头的字段包含了客户端操作系统的地区信息。请注意,这个解析器不支持时区信息。
 
21.8.3 CookieLocaleResolver(cookie地区解析器)
       这个地区解析器检测可能在客户端中存在的Cookie对象,查看其中是否包含了Locale或者TimeZone,如果存在,它会使用配置文件中定义的cookie属性,使用这个地区解析器的属性,你能够定义cookie的名字,同样也能定义它的生命周期,下面是定义CookieLocaleResolver的例子:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">

<property name="cookieName" value="clientlanguage"/>

<!—以秒计,如果设为-1,cookie就不会保留(浏览器关闭时删除)-->
<property name="cookieMaxAge" value="100000">

</bean>
表21.4 CookieLocaleResolver的properties(属性)
属性
默认值
描述
cookieName
classname + LOCALE(类名+地区)
Cookie的名字
cookieMaxAge
Integer.MAX_INT
Cookie在客户端中保留的最大时间,如果设为-1,cookie将不会保留;这个cookie只能在客户端关闭前使用。
cookiePath
/
在网站中,限制cookie只能在某个路径下可见。当cookiePath被定义时,cookie只能在其定义的路径及子路径下可见。
 
21.8.4 SessionLocaleResolver(session地区解析器)
       SessionLocaleResolver可以从session中检索与用户请求相关的Locale对象和TimeZone对象。与CookieLocaleResolver相反的是,这种策略是在Servlet容器中的HttpSession里储存本地选择的地区设置。这样做的结果是,每一个session里的这些设置都只是暂时的,所以会在每一个session关闭时丢失这些设置。
       请注意,SessionLocaleResolver与外部的session管理机制(如:Spring Session项目)没有直接联系。SessionLocaleResolver会针对现有HttpServletRequest来衡量并修改相应的HttpSession属性。
 
21.8.5 LocaleChangeInterceptor(地区变换拦截器)
       你能够为其中一个handlermapping(处理器映射)添加LocaleChangeInterceptor来启用地区的变换(详见”21.4 处理器映射”)。他能够检测请求中的参数,调用在LocaleResolver中的setLocale()方法来改变地区(LocaleResolver也同时存在于context中)。下面的例子,展示了在所有含有siteLanguage参数名的”*.view”资源的调用的条件下,就会改变它的地区。比如,有一个请求的URL是”http://www.sf.net/home.view?siteLanguage=nl”,那么就会改变站点的语言为Dutch(荷兰语)。
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="siteLanguage"/>
</bean>

<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>

<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor"/>
</list>
</property>
<property name="mappings">
<value>/**/*.view=someController</value>
</property>
</bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息