我的应用程序支持更多语言。问题是当用户注销(这意味着我调用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);
}
});
所以问题是当我无效会话时我应该如何保持当前的语言
答案 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通过查询字符串传递参数 我尝试了一个有效的测试用例