use*_*421 1 java spring locale controller request
当我通过请求参数更改首选语言时,网页中的语言会发生变化(使用 检索消息<spring:message code="xxxx"/>)但控制器中的区域设置不会更改,例如:
private void simpleControllerMethod(HttpServletRequest request, HttpServletResponse response, ModelAndView model) {
System.out.println(request.getLocale().toString()); // prints default application locale no matter what
}
Run Code Online (Sandbox Code Playgroud)
dispather-servlet.xml 包含:
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>messages</value>
</property>
<property name="defaultEncoding" value="UTF-8" />
<property name="fallbackToSystemLocale" value="false" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="lt" />
<property name="cookieName" value="lang" />
<property name="cookieMaxAge" value="3600"/>
</bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"></property>
</bean>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)
为什么 HttpServletRequest 的语言环境不会改变?
HttpServletRequest.getLocale() doesn't give you current locale. It gives you the preferred (preferred by the browser -judging from the header). If you want to get current locale you have to pass the Locale through method parameter:
private void simpleControllerMethod(HttpServletRequest request, HttpServletResponse response, ModelAndView model,Locale locale) {
System.out.println(locale);
}
Run Code Online (Sandbox Code Playgroud)
or just get Locale from static holder: LocaleContextHolder.getLocale()
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |