Wicket,页面堆栈和内存使用情况

时间:2008-11-11 16:56:46

标签: wicket

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

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

2 个答案:

答案 0 :(得分:7)

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

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

看一看 用于包装domaing对象的LoadableDetachableModel DataView和IDataProvider用于显示域对象列表

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

也许,当你在Application类中继承WbeRequestCycle时,你可能会在页面图中控制页面的生命周期......虽然没有尝试过,但是

答案 1 :(得分:1)

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