[SPRING] 기본 MVC와 로케일 변경이 작동하지 않는 Spring MVC
SPRING기본 MVC와 로케일 변경이 작동하지 않는 Spring MVC
저는 두 언어 지원을 사용하는 샘플 웹 애플리케이션을 개발하려고 시도한 새로운 Spring 개발자입니다. 기본 로켈을 아랍어로 설정하고 사용자가 JSP 페이지에서 원하는 언어를 클릭 할 때 로케일을 변경하려고합니다.
다음은 mvc-dispatcher-servlet.xml입니다.
<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven/>
<!-- Handles HTTP GET requests for /resources/** by efficiently serving
up static resources in the ${webappRoot}/resources directory -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<context:component-scan base-package="com.benchmark.ushers.presentation.controller"/>
<bean id="internalResourceResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- resource bundle configuration-->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:locale/messages" />
<property name="fallbackToSystemLocale" value="false"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="ar" />
</bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"></property>
</bean>
</mvc:interceptors>
<!-- end of resource bundle configuration-->
그리고 내 JSP 페이지는 아래와 같습니다.
<% @ taglib prefix = "c"uri = "http://java.sun.com/jsp/jstl/core"%>
<% @ taglib uri = "http://tiles.apache.org/tags-tiles"prefix = "타일"%>
<% @ taglib uri = "http://www.springframework.org/tags"prefix = "spring"%>
내 코드에서 무엇이 잘못되었는지는 모르지만 영어 텍스트 만 표시됩니다. 질문에 위의 구성이 정확합니다. 문제는 요청 된 페이지 세트에 web.xml 파일의 환영 페이지로 설정되어 있으므로 인터셉터없이 실행됩니다. web.xml에서이 부분을 주석 처리하면 모든 것이 잘 작동합니다.
당신이 어떤 로캘 변경 요청을 확인합니다 @RequestMapping 매핑 DefaultAnnotationHandlerMapping 필요가 있다고 생각합니다. 스프링 국제화 (Spring Internationalization)를 보라. 이 주제를 읽고 내 경우에는 java config 버전을 사용하고 있었고 "localeResolver"bean 이름을 추가 할 때까지 작동하지 않았다. 내가 만든 국제화 빈은 아래와 같습니다. URL의 lang 매개 변수를 변경하여 작동하는지 확인할 수 있습니다. /some-page.do?lang=ro from https://stackoverflow.com/questions/26573886/spring-mvc-the-default-locale-and-locale-change-doesnt-work by cc-by-sa and MIT license 안내 인 h1>
lang : 영어 | 아랍어
환영합니다 .springmvc :
여보세요 :
해결법
1.질문에 위의 구성이 정확합니다. 문제는 요청 된 페이지 세트에 web.xml 파일의 환영 페이지로 설정되어 있으므로 인터셉터없이 실행됩니다.
2.당신이 어떤 로캘 변경 요청을 확인합니다 @RequestMapping 매핑 DefaultAnnotationHandlerMapping 필요가 있다고 생각합니다. 스프링 국제화 (Spring Internationalization)를 보라.
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
3.내 경우에는 java config 버전을 사용하고 있었고 "localeResolver"bean 이름을 추가 할 때까지 작동하지 않았다. 내가 만든 국제화 빈은 아래와 같습니다. URL의 lang 매개 변수를 변경하여 작동하는지 확인할 수 있습니다. /some-page.do?lang=ro
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
...
@Bean(name="localeResolver")
public LocaleContextResolver getLocaleContextResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(Locale.US);
return localeResolver;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getLocaleChangeInterceptor());
}
@Bean
public LocaleChangeInterceptor getLocaleChangeInterceptor() {
final LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
return interceptor;
}
'SPRING' 카테고리의 다른 글
[SPRING] Spring Rest 웹 서비스에서 돌아 오는 json 응답을 필터링하는 방법 (0)
2019.05.04
[SPRING] Junit / Fongo : NotNull 확인을위한 단위 테스트에서 Fongo를 사용하는 방법 (0)
2019.05.04
[SPRING] Spring RESTful 클라이언트 : 루트 태그 예외 (0)
2019.05.04
[SPRING] JavaFX : Spring 프레임 워크를 JavaFX 앱과 통합 (잘못된 구성) (0)
2019.05.04
[SPRING] Neo4j HA (임베디드)를 통해 봄? (0)
2019.05.04