2012-05-07 3 views
0

나의 현재 프로젝트는 시스템 날짜와 i18n 속성 파일에 정의 된 형식을 의미하는 사용자 정의 된 "시스템 날짜"가 필요합니다. 하지만이 클래스를 다루는 클래스는 일반적인 유틸리티 클래스이지만 웹 레이어에는 없습니다. 그러나 HttpServletRequest 객체에서 로케일 (날짜 형식을 수정)을 가져와야합니다. 그 유틸리티 클래스에 HttpServletRequest 인스턴스 autowire 생각하고 있습니다. 그것은 디자인 패턴을 망가 뜨리는 것 같지만 그것이 piratical 같아요. 그러나 그것은 작동하지 않습니다. 그래서 그 점이 잘못되었으며 Spring의 다른 레이어에서 Locale을 해결하는 더 좋은 방법이 있습니까? 사전에Autowire HttpServletRequest? Locale을 해결하려면?

감사합니다.

답변

2

영향을받는 방법의 매개 변수로 Locale을 수락하기 위해 유틸리티 클래스에 과부하를 걸면 훨씬 더 우아하지 않을까요? 그런 다음 컨트롤러에서 로켈을 검색하여 유틸리티로 전달할 수 있습니다.

+0

빠른 답변을 보내 주셔서 감사합니다. 여기서 문제는 시스템 날짜가 명시 적 "요청"에서 검색되지 않는다는 것입니다. 사용자가 브라우저에서 웹 응용 프로그램의 URL을 누를 때 색인 페이지에 나타나기로되어 있습니다. 우리는 어떤 URL 패턴을 기반으로 컨트롤러를 만들 수 있지만 "/"요청에서 명시적인 HttpServletRequest 인스턴스를 가질 수 있을까요? 고맙습니다. – Dreamer

0

저는 Spring Framework의 SessionLocaleResolver를 사용하는 것을 선호합니다. 세션에서 로케일을 변경하고 저장하므로 응용 프로그램의 모든 지점에서 해당 로케일을 가져올 수 있습니다.

다음과 같은 구성을 참조하십시오. 또한 더 나은 이해를 위해 스프링 문서를 읽어보십시오.

<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> 
     </list> 
     </property> 
     <property name="defaultEncoding" value="UTF-8"/> 
    </bean> 

희망이 도움이 될 것입니다. 건배.