会话超时后Wicket setResponsePage

时间:2012-04-16 16:58:00

标签: redirect wicket session-timeout

这是我的Wicket 1.5应用程序登录页面的onSubmit()方法:

@Override
public void onSubmit() {
    super.onSubmit();
User theUser = loginForm.getModelObject();

/* call a DAO function to check the user's credentials */
if(/* DAO call succeeds*/) {
    MyCustomeSession authSession = (MyCustomSession)Session.get();
        authSession.success("Welcome, " + theUser.getFullName());
    setResponsePage(new HomePage());
}
else {
    loginForm.error("Username or password was incorrect");
}   
}

这适用于初始登录,对于注销然后重新登录,接下来看到的是带有欢迎消息的主页。

会话超时后,此应用程序会将用户重定向回同一个登录页面,并显示反馈消息"您的会话已过期等等,等等#34;并允许用户再次输入用户名和密码。如果用户执行此操作,则登录成功:隐藏的菜单变为可见,欢迎消息显示等

但是,显示的页面仍然是“登录”页面,其中包含所需用户名和密码的其他反馈消息(即使已输入两者并且登录成功)。这是一个剪裁的屏幕截图:

after session timeout feedback panel

这与Wicket有点奇怪吗?是修复还是解决方法?

1 个答案:

答案 0 :(得分:4)

好吧,似乎application.setPageExpiredErrorPage(page)的网页后来无法执行setResponsePage(new HomePage());,但必须改为setRepsonsePage(HomePage.class);

同时,当这个LoginPage只是一个普通页面时,即初次登录或注销后,它必须使用setResponsePage(new HomePage());这没有多大意义,但这似乎是Wicket的方式。

所以我在名为isTimeout的LoginPage构造函数中添加了一个布尔值,并相应地调用了一个或另一个版本的setResponsePage