2015-05-20 5 views
1

Мое приложение поддерживает более язык. Проблема заключается в выходе пользователя из системы (что означает, что я вызываю getSession().invalidate()), тогда текущий язык будет потерян и будет создан новый сеанс с языком по умолчанию.Как сохранить текущий язык, когда недействительный сеанс в калитке

Язык устанавливает по ссылке:

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); 
    } 
}); 

Так вопрос состоит в том, как я должен держать текущий язык, когда я invaliate сеанса

+0

Вы считали сохранение своих пользовательских настроек в базе данных? –

+0

да, но это параметры, которых я хочу избежать, потому что когда пользователь выходит из системы, тогда нет пользователя, и я думал, что калитка поддерживает каким-то образом, как сохранить некоторые вещи с недействительным сеансом. – hudi

+0

В принципе вам нужно начать новый сеанс (с " public user "pirncipal), передавая локаль в качестве параметра на общедоступную страницу, где начинается новый сеанс. –

ответ

1

EDIT: недействительность сеанса не позволяет сбросить параметр в сессии , жизнеспособное решением, которое я успешно протестировал является использование 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

yes Я пробовал это, но он не работает, потому что invalidate просто устанавливает некоторый параметр для отмены сеанса при следующем запросе, а затем создается целая новая сессия – hudi

+0

ok, я изменил свой ответ, предлагая использовать invalidateNow – Giovanni

+0

, но почему я должен немедленно аннулировать сеанс? PS: он по-прежнему не работает, потому что после invalidate или invalidateNow по-прежнему создается целый новый сеанс через newSession в классе AuthenticatedWebApplication – hudi

3

Лучшее использование Cookie для анонимных пользователей. Перед тем, как аннулировать сохранение lang в cookie. В YourSession # getLocale() использует файл cookie, если нет пользователя.

+0

Я не уверен, но недействителен и удаляет файлы cookie – hudi

+0

Удаляет файл cookie сеанса, но не пользовательские файлы cookie. –

+0

Я также советую вам принять это решение. Это также экономит много беспорядка в ваших PageParameters. – RobAu

Смежные вопросы