我有一个 Wicket (6.9.0) 应用程序,它在几个页面上接受用户输入,处理数据,最后显示一个提供输入摘要的页面。应用程序在 session 中存储一些数据,因此我希望最终使其无效,以便用户无法返回并继续使用过时的 session 数据。
我尝试在我的摘要页面中使用 session.invalidate(),首先在构造函数中,然后在 onAfterRender() 中,但两次我最终都看到“页面已过期”页面,而不是摘要页面的输出。
有没有办法显示我的摘要页面,然后使我的 session 无效?或者这是不应该在 Wicket 中完成的事情?
最佳答案
“页面过期”问题是由框架的渲染策略引起的。默认情况下,Wicket 使用“post-after-redirect”策略来呈现页面。因此,如果 session 在页面中的某个位置失效,则以下 get-request 将始终显示“页面已过期”消息,因为 session 不再存在。
简单的解决方案是更改应用程序 init 方法中的渲染策略:
@Override
protected void init() {
super.init();
getRequestCycleSettings().setRenderStrategy(RenderStrategy.ONE_PASS_RENDER);
}
此解决方案的缺点是,当用户按下浏览器上的刷新按钮时,它会遇到“双重提交问题”。
关于session - 如何使 Wicket session 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474300/