如何在wicket中进行invalide会话时保持当前语言

时间:2015-05-20 09:02:55

标签: java wicket

我的应用程序支持更多语言。问题是当用户注销(这意味着我调用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);
    }
});

所以问题是当我无效会话时我应该如何保持当前的语言

2 个答案:

答案 0 :(得分:4)

最好为匿名用户使用Cookie。 在无效之前将lang保存在cookie中。在YourSession#getLocale()中,如果没有用户,则使用cookie。

答案 1 :(得分: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"));
    }

Wicket通过查询字符串传递参数 我尝试了一个有效的测试用例