2017-09-25 6 views
0

Quand je change la langue preffered via le paramètre de demande la langue changements dans les pages Web (les messages sont récupérés avec <spring:message code="xxxx"/>), mais locale ne change pas dans les contrôleurs, par exemple:Controller locale HttpServletRequest ne change pas

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 contient:

<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> 

Pourquoi les paramètres régionaux ne changent pas pour HttpServletRequest?

Répondre

1

HttpServletRequest.getLocale() ne vous donne pas les paramètres régionaux en cours. Il vous donne le préféré (préféré par le navigateur -juger de l'en-tête). Si vous voulez obtenir locale actuelle, vous devez passer le paramètre par Locale méthode:

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

Comportement inattendu de 'HttpServletRequest.getLocale()' d'une part, le défaut de lire ce que la méthode ne fait exactement l'autre main. Merci d'avoir répondu. – user435421