【问题标题】:Wicket setResponsePage after a session timeout会话超时后的 Wicket setResponsePage
【发布时间】:2012-04-16 16:57:59
【问题描述】:

这是我的 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");
}   
}

这对于初始登录和注销然后重新登录都很好,因为接下来看到的是带有欢迎消息的主页。

会话超时后,此应用程序将用户重定向回同一登录页面,并带有反馈消息“您的会话已过期等等等等”,并允许用户再次输入用户名和密码。如果用户这样做,则登录成功:隐藏的菜单变为可见,欢迎消息显示等。

但是,显示的页面仍然是登录页面,并带有有关所需用户名和密码的附加反馈消息(即使两者都已输入并且登录成功)。这是一个截屏:

Wicket 有什么奇怪的地方吗?有修复或解决方法吗?

【问题讨论】:

  • 这超出了左侧字段,但是在 setResponsePage() 之后是否需要 setRedirect(true)?如果我 6 个月没有编码,我可能应该停止评论。
  • @jbrookover:Wicket 的 Component 类没有 setRedirect 这样的方法。您可能一直在考虑不同的框架吗?
  • Wicket 1.4 仍然有 Component.setRedirect() 这可能解释了混乱。

标签: redirect wicket session-timeout


【解决方案1】:

好吧,看起来是application.setPageExpiredErrorPage(page) 的页面随后不能执行setResponsePage(new HomePage());,而是必须执行setRepsonsePage(HomePage.class);

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多