2013-08-22 45 views
3

我的應用程序由幾個部分組成。我想通過更改所有應用程序中的URL來改變區域設置,除了一個小的GWT位置之外,我想保留用戶。我需要在URL中提供語言環境以確保該地點以正確的語言加載。如何在不使用queryParam的情況下設置GWT語言環境onLoad?

我該怎麼辦?

我看到如下選項:

1)創建一個從那個地方獨立的模塊,並使用queryparam作爲區域設置在該模塊的XML設置文件的來源允許。據我瞭解,我需要放下類似<set-configuration-property name="locale.searchorder" value="queryparam,cookie"/> 這可能會起作用,但對於這麼小的任務來說它有點難。

2)另一種選擇是手動實現所需的功能。我寫了下面的代碼:

String languageCode = Window.Location.getParameter("lang"); 
Cookies.setCookie(COOKIE_NAME, languageCode, new Date(System.currentTimeMillis() * 1000 * 3600 * 24 * 365 * 100)); 
Scheduler.get().scheduleDeferred(new ScheduledCommand() 
{ 
    @Override 
    public void execute() 
    { 
     Window.Location.reload(); 
    } 
}); 

它的工作原理,但問題是有延遲調用:如果我使用它,頁面加載,然後重新加載信號到來和頁面重新加載後開始已經顯示出來。用戶觀察到奇怪的閃爍。如果我沒有使用延遲調用的cookie沒有設置,我不知道爲什麼(你能解釋一下,請問?)。

那麼你將如何解決這個任務?

回答

4

我們避免在GWT代碼中設置cookie。我們會根據用戶操作或設置在着陸頁中設置cookie,然後重定向到GWT應用程序。

步驟1 - 登錄 - JSP頁面設置cookie並進行身份驗證。

第2步 - 成功時將URL指向承載GWT應用程序的html文件。

第3步 - GWT只需要通過模塊xml文件讀取cookie信息。

在您的.gwt.xml文件中提供Login jsp設置的cookie。

<set-configuration-property name="locale.cookie" value="GWT_LOCALE" /> 

參見參考

1)GWT i18n, change metaTag and reload application

2)https://developers.google.com/web-toolkit/doc/latest/DevGuideI18nLocale

3)http://learninggwt.blogspot.in/2011/07/gwt-internationalization-and-cookies.html

+0

事實上,大概也就是要做到這一點,謝謝,SSR的最佳途徑。 – KutaBeach

0

以上回答是正確的,但我想添加更多信息關於特定情況。

當您使用Spring-security並需要在登錄後設置區域設置(我認爲這是因爲問題標題中的「onLoad」字),您可以實現AuthenticationSuccessHandler。

即在MyAuthenticationSuccessService中。java的

@Override 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, 
     Authentication authentication) throws IOException, ServletException { 
    String userName = authentication.getName(); 
    // ... retrieve user info 
    String locale = userInfo.getLocale(); 

    response.sendRedirect("/MyGwtModule.html?locale="+locale+"#HomePlace:"); 
    } 

和Spring配置

<form-login login-page="/login" authentication-failure-url="/loginfailed" 
      authentication-success-handler-ref="myAuthenticationSuccessService" /> 
相關問題