我有一个Wicket(6.9.0)应用程序,可以在几页上获取用户输入,处理数据,最后显示一个页面,给出输入摘要。应用程序在会话中存储了一些数据,因此我希望最终使其无效,以便用户无法返回继续使用过时的会话数据。
我尝试在我的摘要页面中使用session.invalidate(),首先在构造函数中,然后在onAfterRender()中,但两次我最终都看到了“Page Expired”页面而不是我的摘要页面的输出。 / p>
有没有办法显示我的摘要页面然后使我的会话无效?或者这是不应该在Wicket中完成的事情?
答案 0 :(得分:2)
“页面已过期”问题是由框架的呈现策略引起的。默认情况下,Wicket使用重定向后发布策略来呈现页面。因此,如果会话在页面中的某个位置无效,则以下get-request将始终显示“Page Expired”消息,因为该会话不再存在。
简单的解决方案是在Application init方法中更改渲染策略:
@Override
protected void init() {
super.init();
getRequestCycleSettings().setRenderStrategy(RenderStrategy.ONE_PASS_RENDER);
}
此解决方案的缺点是,当用户按下浏览器上的刷新按钮时,它会遇到“双重提交问题”。
答案 1 :(得分:1)
如果你在onAfterRender的构造函数中使会话无效,那么这是在页面显示之前,这就是你看到Page Expired Page的原因。
你可以: