如何从Spring获取当前用户区域设置而不将其作为parameter passing给函数?

我正在使用Spring 3.1,并希望find当前用户的语言环境有没有办法直接抓住语言环境,而不必被迫将其从控制器传递到服务层…等等。

spring存储区域设置在一个线程本地存储,它可以通过调用一些静态方法来抓取?

我也在寻找如何访问locale而不通过locale,但是我对Spring仍然很陌生,发现大多数解决scheme都是令人困惑的。 但事实certificate,Spring MVC确实将语言环境存储在线程本地存储中。 它可以通过访问:

 Locale locale = LocaleContextHolder.getLocale(); 

最后一种方法是基于本地线程,以便在您的架构的任何实体中提供当前的语言环境。 […]您必须意识到,LocaleContextHolder的内容默认情况下对应于Web请求中指定的区域设置。

发件人: 使用Spring MVCconfiguration区域切换3 。 (这篇文章还提供了获取语言环境的替代configuration/方法,这对于任何想要这样做的人都可能是有用的)。

您也可以在这里查看Spring的LocaleContextHolder文档。

这取决于你在哪里configuration存储区域设置,在会话或cookie?

在我的应用程序中,我configuration了将用户语言环境存储在下面提到的configuration的会话中。

  <mvc:interceptors> <ref bean="localeChangeInterceptor"/> </mvc:interceptors> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang"/> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="en"/> </bean> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>/WEB-INF/i18n/labels</value> <value>/WEB-INF/i18n/messages</value> <value>/WEB-INF/i18n/include</value> </list> </property> <property name="defaultEncoding" value="UTF-8"/> </bean> 

如果你已经做了这样的事情,那么你可以轻松地从会话中检索区域设置参数。

希望这可以帮助你。

干杯。

我们有相同的需求,所以想出了把Locale放到ThreadLocal上下文中。 我们已经有了一个存储在ThreadLocal上下文中的对象(一些用户信息),所以只是附加它(看起来像一个黑客,但我们find了最快的解决scheme)。