2013-12-20 2 views
0

다음 문제에 대한 도움이 필요합니다. 우리는 프레임 워크를 전혀 사용하지 않는 기존 웹 애플리케이션 (서블릿 만)을 가지고 있으며 새로운 기능을 추가해야하지만 web.xml에 새로운 서블릿을 추가하는 대신 Spring과 함께 Struts 1을 추가 할 예정입니다.Struts 1 사용자 정의 현지화

프로젝트가 이미 존재하므로, Struts가 이미 설정된 규칙을 따라갈 수 있도록 구성해야합니다. 그 중 하나가 현지화입니다. 대신 파일을 .property 사용

모든 지역화 텍스트 그래서 난 내 자신의 MessageResourcesFactory의 MessageResources 클래스를 구현 우리의 데이터베이스에서 왔습니다. 문제는 우리 응용 프로그램에서 "LANGUAGE"이라는 정수 세션 속성에서 사용자 언어를 가져오고 Struts가 기본적으로 사용하는 Locale 속성 인 "org.apache.struts.action.LOCALE"이 아니라는 것입니다.

질문은 여기 있습니다. stantard Locale 속성 대신 사용자 정의 Integer 속성에서 사용자 언어를 가져 오도록 Struts에 지시하려면 어떻게합니까?

감사합니다.

답변

1

내가 아는 한, Struts가 로켈을 사용하기 위해 다른 세션 속성을 사용하도록 지시하는 직접적인 방법은 없습니다. Struts가 이것을 할 수 있다고해도, 사용자 정의 정수와 "진짜"Locale 객체 사이의 매핑을 구현해야합니다.

내 제안 :

  • 는 또한 스트럿츠를 설정하기 위해 언어 속성을 설정하는 코드를 해당 Struts의 로케일 속성
  • 언어 속성을 동기화 자신의 javax.servlet.http.HttpSessionAttributeListener을 구현 또는 변경 세션 속성
+0

나는이 문제가 직접적으로 두 가지 세션 속성을 동기화하는 것이므로 문제를 직접 공격하기 때문에 가장 적절한 해결책이라고 생각합니다. 감사. –

0

또 다른 해결책은 필트 RLANGUAGE을 가로 작용 executiong 전에있어서 스트럿 Locale 설정할 것이다 :

public class localeFilter implements Filter 
{ 

    public void destroy() 
    { 

    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception 
    { 
     // read the int LANGUAGE and set the Locale used by Struts 
    } 

    public void init(FilterConfig filterConfig) throws ServletException 
    { 

    } 

} 

및 web.xml의 필터를 선언

<filter> 
    <filter-name>localeFilter</filter-name> 
    <filter-class>com.example.filters.MyFilter</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>localeFilter</filter-name> 
    <url-pattern>*.do</url-pattern> 
    </filter-mapping> 
0

해결책은 ActionServlet 연장하는 doGetdoPost을 대체하여 process() 앞에 요청하여 로케일을 변경하십시오. 마찬가지로