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

Schreibe einen Kommentar