L'annotation Spring MVC LocaleChangeInterceptor basée ne fonctionne pas
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;
}
}
Ci-dessus est mon annotation de configuration. J'ai essentiellement traduit cette tutoriel XML.
Étrangement, il ne fonctionne pas quand je vais à ...?language=fr
.
Cependant, le code suivant fonctionne (en app-servlet.xml
) (avis ici, c'est à l'aide de locale
):
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
</mvc:interceptors>
Une autre chose importante à noter est que lorsque je mets des points d'arrêt sur les méthodes ci-dessus, tous les trois, à chaque point d'arrêt n'pause, ce qui implique que "quelqu'un" est la lecture des valeurs.
Alors, pourquoi ne pas mon annotation en fonction de l'intercepteur ne fonctionne pas?
source d'informationauteur Poni | 2012-08-01
Vous devez vous connecter pour publier un commentaire.
L'extension de config de la classe par
WebMvcConfigurerAdapter
peut aider.pour ajouter de l'intercepteur entrée de remplacer
méthode.
également ajouter des haricots entrée pour
LocaleChangeInterceptor
En plus de ce swap dit, vous devez ajouter:
Le haricot nom est important. De cette façon, le printemps régler les paramètres régionaux appropriés de résolution.
Sinon, vous pouvez retourner le SessionLocaleResolver.
Si vous ne le faites pas, vous obtiendrez l'erreur suivante:
L'exemple complet de Spring MVC 4.1.4.COMMUNIQUÉ de localisation est affiché.
Vous pouvez également utiliser MKYong de exemple (mais malheureusement, sa config est basé sur XML) pour résoudre les problèmes avec la structure du projet.