4

Wicket 应用程序序列化和缓存所有页面以支持有状态组件,以及支持后退按钮,以及其他可能的原因。我有一个应用程序,它使用 setResponsePage 从一个屏幕导航到另一个屏幕。在相当短的时间内会话变得相当大,因为所有先前的页面都存储在会话中。在大多数情况下,出于显而易见的原因,我只需要会话包含当前页面,也许还有最后 2 或 3 个页面,以便使用浏览器的后退按钮轻松导航。

在我离开页面并且我知道我不想使用返回到该页面版本的按钮后,我可以强制页面过期吗?更一般地说,在 Wicket 中处理会话增长的推荐方法是什么?

4

2 回答 2

7

http://apache-wicket.1842946.n4.nabble.com/Wicket-Session-grows-too-big-real-fast-td1875816.html

如果您在页面上使用大量域对象,这些对象最终与其他域对象紧密耦合,请务必避免对这些对象进行序列化!

查看 LoadableDetachableModel 用于包装域对象 DataView 和 IDataProvider 以显示域对象列表

您不应将域对象填充到组件的实例变量中。为了在匿名子类中使用它们,您不应将域对象引用设为 final。你不应该将域对象的列表传递给 ListView。

也许,在您的 Application 类中子类化 WbeRequestCycle 时,您可能会控制页面映射中页面的生命周期......虽然没有尝试过

于 2008-12-07T11:30:00.453 回答
1

为了避免由于会话中的序列化和内存使用堆积而导致字节流连续堆叠而导致会话阻塞,您可以使用可分离模型通过使用钩子在每个请求周期开始时安排自己的存储和恢复,这这样您就可以完全控制包含会话中不需要的页面字节流或可通过“返回”按钮导航的模型。

于 2011-06-20T11:40:10.643 回答