Spring MVC LocaleChangeInterceptor auf Basis einer annotation funktioniert nicht
import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
@Configuration
public class Config {
@Bean
public LocaleResolver localeResolver() {
final CookieLocaleResolver ret = new CookieLocaleResolver();
ret.setDefaultLocale(new Locale("en_US"));
return ret;
}
@Bean
public MessageSource messageSource() {
final ReloadableResourceBundleMessageSource ret = new ReloadableResourceBundleMessageSource();
ret.setBasename("classpath:lang");
ret.setDefaultEncoding("UTF-8");
return ret;
}
@Bean
public HandlerMapping handlerMapping() {
final LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("language");
final DefaultAnnotationHandlerMapping ret = new DefaultAnnotationHandlerMapping();
ret.setInterceptors(new Object[] { interceptor });
return ret;
}
}
Oben ist meine Anmerkung-Konfiguration. Ich habe im Grunde übersetzt diese tutorial XML.
Komischerweise funktioniert es nicht wenn ich ...?language=fr
.
Aber der folgende Code funktioniert (in app-servlet.xml
) (beachten Sie hier, dass es locale
):
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
</mvc:interceptors>
Andere wichtige Sache zu beachten ist, dass wenn ich setzen Sie Haltepunkte auf die oben genannten Methoden, alle drei von Ihnen, jeder Haltepunkt bricht, was bedeutet, dass "jemand" ist das Lesen der Werte.
So, warum würden Sie nicht meinen-annotation-based interceptor funktioniert nicht?
InformationsquelleAutor Poni | 2012-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausweitung der config-Klasse
WebMvcConfigurerAdapter
helfen kann.hinzufügen interceptor Eintrag überschreiben
Methode.
auch add-bean-Eintrag für
LocaleChangeInterceptor
InformationsquelleAutor swapy
Zusätzlich zu dem, was swap sagt, Sie müssen hinzufügen:
Dem bean-Namen ist wichtig. Das ist der Weg, der Frühling beheben das richtige Gebietsschema-resolver.
Alternativ können Sie die Rückgabe der SessionLocaleResolver.
Wenn Sie nicht fügen Sie diese, erhalten Sie die folgende Fehlermeldung:
Ja, du hast Recht. Der name der Bohne ist die Lösung @Bean(name = "localeResolver")
InformationsquelleAutor Wouter
Das vollständige Beispiel von Spring MVC 4.1.4.RELEASE Lokalisierung ist gebucht.
Sie können auch verwenden MKYong ist Beispiel (aber leider seine config basiert auf XML), um die Probleme zu lösen, mit der Struktur des Projektes.
InformationsquelleAutor Lord Nighton