2017-09-25 76 views
0

当我通过请求参数改变优先停留语言的语言中的网页变化(消息与<spring:message code="xxxx"/>检索)但区域不改变在控制器,例如:控制器HttpServletRequest的区域不改变

private void simpleControllerMethod(HttpServletRequest request, HttpServletResponse response, ModelAndView model) { 
     System.out.println(request.getLocale().toString()); // prints default application locale no matter what 
    } 

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> 

为什么语言环境不会更改为HttpServletRequest?

回答

1

HttpServletRequest.getLocale()不会给你当前的语言环境。它为您提供了首选(浏览器首选 - 来自标题的评估)。 如果你想获得当前的locale你必须通过方法的参数传递的区域设置:)一方面的`HttpServletRequest.getLocale

private void simpleControllerMethod(HttpServletRequest request, HttpServletResponse response, ModelAndView model,Locale locale) { 
    System.out.println(locale); 
} 
+0

意外行为(',读取故障是什么方法正好做其他手。感谢你的回答。 – user435421