2017-09-25 124 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