2015-05-20 45 views
1
invalide會議

我的應用程序支持更多的語言,然後。問題出在用戶註銷(意思是我撥打​​),那麼當前語言丟失,並且使用默認語言創建新會話。如何保持當前的語言時在檢票

語言是通過鏈接集:

add(new Link<Void>("goSk") { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public void onClick() { 
     getSession().setLocale(new Locale("sk", "SK")); 
    } 
}); 

add(new Link<Void>("goEn") { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public void onClick() { 
     getSession().setLocale(Locale.US); 
    } 
}); 

所以,問題是我應該如何保持現有的語言時,我in​​valiate會議

+0

您是否考慮將您的用戶偏好保存在數據庫中? –

+0

是的,但這個是我想避免,因爲當用戶註銷則沒有用戶,我想檢票支持某種方式如何保留一些東西用無效的會話 – hudi

+0

原則上,你需要開始一個新的會話(該選項的「公共用戶「pirncipal),將區域設置作爲參數傳遞給新會話開始的公共頁面。 –

回答

1

編輯:無效的會話不允許在會話重置參數。 一個可行的解決方案,我成功地測試是使用PageParameters

Locale currentLocale=getSession().getLocale(); 
session.invalidate();//clear all session data 
PageParameters pp=new PageParameters(); 
pp.add("locale", currentLocale.getLanguage()); 
setResponsePage(<you class>.class,pp); 

,並在你的頁面中setResponsePage指定你必須提供與PageParameters一些構造像

public class Login extends BasePage { 
    public Login(PageParameters pp) { 
     //your code here 
     logger.debug("login user"+pp.getString("locale")); 
    } 

檢票通過查詢字符串傳遞參數 我試圖與工作測試用例

+0

是的,我嘗試這一點,但因爲無效只是設置一些參數就作廢下一個請求會話它不工作,然後有創建全新的會話 – hudi

+0

好,我修改了我的答案表明使用invalidateNow – Giovanni

+0

但我爲什麼要馬上會失效? PS:現在還沒有工作,因爲後無效或invalidateNow存在AuthenticatedWebApplication類 – hudi

3

更好的使用cookie匿名用戶。 在無效之前將lang保存在cookie中。在YourSession中#如果沒有用戶,getLocale()使用cookie。

+0

解決方案我不知道,但無效也刪除cookie – hudi

+0

它刪除會話cookie,但不是任何自定義cookie。 –

+0

我也建議你採取這個解決方案。它還可以在PageParameters中節省大量的混亂。 – RobAu

相關問題