Ich habe auch gesucht, wie ich auf das Gebietsschema zugreifen kann, ohne es herumzugeben Locale
, aber ich bin noch ziemlich neu in Spring und fand die meisten Lösungen verwirrend. Es stellt sich jedoch heraus, dass Spring MVC das Gebietsschema im lokalen Thread-Speicher speichert. Es kann erreicht werden durch:
Locale locale = LocaleContextHolder.getLocale();
Der letzte Ansatz [...] basiert auf einem lokalen Thread, um das aktuelle Gebietsschema in einer beliebigen Entität Ihrer Architektur bereitzustellen. [...] Sie müssen sich bewusst sein, dass der Inhalt des LocaleContextHolder standardmäßig dem in der Webanforderung angegebenen Gebietsschema entspricht.
Von: Konfigurieren der Gebietsschemaumschaltung mit Spring MVC 3 . (Dieser Beitrag bietet auch alternative Konfigurationen / Methoden zum Abrufen des Gebietsschemas, die für alle nützlich sein können, die dies tun möchten.)
Sie können auch die Ansicht LocaleContextHolder
docs von Frühling hier .
Es hängt davon ab, wo Sie das Gebietsschema in einer Sitzung oder in einem Cookie gespeichert haben.
In meiner Anwendung habe ich konfiguriert, dass das Benutzergebietsschema in seiner Sitzung mit der unten angegebenen Konfiguration gespeichert wird.
<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>
Wenn Sie so etwas getan haben, können Sie den Gebietsschema-Parameter einfach aus der Sitzung abrufen.
Hoffe das hilft dir.
Prost.
quelle
Wir hatten das gleiche Bedürfnis, so kamen mit Aufstellen
Locale
inThreadLocal
Zusammenhang. Wir hatten bereits ein Objekt (einige Benutzerinformationen) imThreadLocal
Kontext gespeichert , also haben wir es einfach angehängt (sieht aus wie ein Hack, aber die schnellste Lösung, die wir gefunden haben).quelle
LocaleContextHolder
bewirkt: SpeichernLocale
in einerThreadLocal
Variablen. Sie müssen keinen benutzerdefinierten Hack verwenden (da Spring diesen Hack bereits für Sie ausführt).