2

我有一个 Wicket (6.9.0) 应用程序,它在几个页面上接受用户输入,处理数据并最终显示一个页面,该页面给出了输入的摘要。该应用程序在会话中存储了一些数据,因此我想最终使其无效,以便用户无法返回并继续使用陈旧的会话数据。

我尝试在我的摘要页面中使用 session.invalidate(),首先在构造函数中,然后在 onAfterRender() 中,但两次我最终都看到“页面已过期”页面,而不是我的摘要页面的输出。

有没有办法显示我的摘要页面然后使我的会话无效?或者这是在 Wicket 中不应该做的事情?

4

2 回答 2

2

“页面过期”问题是由框架的渲染策略引起的。默认情况下,Wicket 使用发布后重定向策略来呈现页面。因此,如果会话在页面中的某处失效,则以下 get-request 将始终显示“页面已过期”消息,因为会话不再存在。

简单的解决方案是在 Application init 方法中更改渲染策略:

@Override
protected void init() {
   super.init();
   getRequestCycleSettings().setRenderStrategy(RenderStrategy.ONE_PASS_RENDER);
}

该解决方案的缺点是当用户按下浏览器上的刷新按钮时会出现“双重提交问题”。

于 2013-07-04T20:07:19.813 回答
1

如果您在 onAfterRender 的构造函数中使会话无效,那么这是在页面显示之前,这就是您看到 Page Expired Page 的原因。

你可以:

于 2013-07-04T18:27:47.120 回答