2013-03-28 29 views
0

當用戶首次單擊鏈接到我的主頁時,如果鏈接包含?langId = fr_FR,頁面將以法語顯示;到現在爲止還挺好。如果用戶嘗試登錄失敗,則會以法文顯示錯誤消息,這是完美的。問題是如果第二次失敗嘗試登錄。在這種情況下,頁面語言默認爲英語。如何在後續失敗的登錄嘗試中保留主頁i18n

我不知道如何在上面的情況下保留法語頁面(即當初始url包含langId = fr_FR時的任何後續請求)。我應該使用CookieLocaleResolver而不是SessionLocaleResolver嗎?

該網站使用Spring Security,我已經實現了一個在Spring Security過濾器之前運行的過濾器。此過濾器將使用langId請求參數設置LocaleContextHolder。這對初次登錄嘗試很有幫助。任何其他請求,我失去了langId參數。

有什麼我可以在loadByUserName()方法中做什麼,這將允許我堅持原始langId?

下面是解析器和攔截

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" > 
<property name="defaultLocale" value="en" /> 
</bean> 

<mvc:interceptors> 
    <bean id="localeChangeInterceptor" 
     class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
     <property name="paramName" value="langId" /> 
    </bean> 
</mvc:interceptors> 

編輯

使用CookieLocaleResolver的,而不是一個SessionLocaleResolver不解決此問題的配置。但是,如果用戶禁用cookies,那麼我就回到原點了。我希望找到一種方法來在用戶多次登錄時保持頁面爲法文。任何幫助真的很感謝謝謝!

回答

0

問題正是sessionlocaleresolver。由於登錄嘗試失敗,每次都會創建一個新的會話(我相信)。

這就是爲什麼cookielocaleresolver正在工作。 Cookie已設置並保留在您的域名中。

我確實使用sessionlocaleresolver並沒有考慮過這個問題。

我看到的一種方法應該是在您的表單操作中包含區域設置參數。這可能是最簡單的解決方案?

+0

有趣。目前,我們只是使用標籤。其中,只會將用戶轉到logon.html頁面。所以,使用你的解決方案,我必須確保頁面請求通過一個控制器。我理解正確嗎? – Carl

+0

對不起,我很快回應,並不明白你在說什麼。我會考慮將langId添加到登錄表單的操作中。謝謝! – Carl