如何从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)。
- 你如何在Eclipse中创build一个Spring MVC项目?
- 使用@ExceptionHandler处理spring安全authenticationexception
- 在Spring中configurationObjectMapper
- 在Spring 3中将属性添加到所有控制器的模型中
- 春季 – POST后redirect(即使有validation错误)
- java.lang.ClassNotFoundException:org.springframework.web.servlet.DispatcherServlet
- 如何使用Spring MVC正确logginghttp请求
- Spring @Autowired如何工作
- 用于testing的embedded式H2数据库的弹簧configuration