2013-07-15 52 views
0

我正在使用struts 2和sitemesh。只需設置一個以'request_locale'參數命名的請求參數,就可以在登錄頁面中更改語言環境而不會出現問題。但在所有其他頁面中,我使用sitemesh來裝飾頁眉和頁腳。我試圖爲其他頁面設置相同的參數,但沒有運氣。這些都是一些我在我的登錄操作嘗試其他代碼:struts 2和sitemesh本地化

request.getSession(false).setAttribute("WW_TRANS_I18N_LOCALE", newLocale); 
ActionContext.getContext().setLocale(newLocale); 
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, newLocale); 

當我寫出這些設置我看到一切正常。 但是,當我寫出來

<c:out value="${pageContext.request.locale.language}"/> 

它總是顯示瀏覽器的接受語言和它沒有做任何本地化。 我如何使本地化與sitemesh一起工作?

+0

所以,一切是你的工作只是不知道如何在JSP中顯示當前的語言環境? –

+0

登錄後我沒有重定向到index.jsp頁面。但是頁面以瀏覽器的默認語言呈現。如果是因爲重定向到頁面,我現在正在搜索。我會嘗試重定向到行動。 – acpuma

回答

0

我試着從登錄動作重定向到一個名爲home的動作,並使用請求語言環境參數,然後這個動作重定向到index.jsp。現在一切都好。 而我設置默認操作爲主動作,因此當用戶從地址欄輸入根頁面時,它正在啓動主動操作,因此i18n攔截器和intercoptors正在活躍。 這是struts.xml中login.action:

<action name="login" class="wateron.login.LoginAction" > 
     <result type="redirectAction"> 
      <param name="actionName">home?request_locale=${request_locale}</param> 
      <param name="namespace">/</param> 
     </result> 
</action> 

而且這是在struts.xml中主場行動:

<package name="default" extends="struts-default" namespace=""> 
    <default-action-ref name="home" /> 
    <action name="home"> 
     <result>/index.jsp</result>  
    </action> 
</package> 

感謝參考問題: How to use interceptor on the default page?