在多个请求周期中保留组件状态

时间:2011-05-22 12:24:47

标签: java wicket state

关于使用Apache Wicket 1.4.x进行组件状态管理的问题

我有一个可收藏的有状态页面,其中包含带有设置搜索条件的表单。用户搜索与所选标准匹配的项目,然后离开页面(例如,到详细项目视图)。在某些时间点,用户可以使用可收藏的链接返回搜索页面。我希望将最后一个搜索条件预选为默认选项。但是,BookmarkablePageRequestTarget aways似乎在其#respond(RequestCycle)方法中创建了一个新的目标页面实例,从而失去了以前的状态(支持搜索表单的bean)。

当然,我可以手动管理表单状态并将其存储在WebSession子类中,但我想知道是否有更好的方法可以在多个请求周期中保留组件状态,例如制作Wicket - 使用目标页面的现有实例?理想情况下,这适用于书签链接。

2 个答案:

答案 0 :(得分:1)

通常,组件的状态存储在组件实例本身中。 (直接在其中,或间接在模型中。)

所以你真正需要做的就是创建一个指向搜索页实例的链接,或者使用页面实例或类似内容调用setResponsePage(),具体取决于你的方式重新定向用户。

通常,您根本不应该触及请求目标,除非实际情况比您描述的情况复杂得多。

答案 1 :(得分:0)

使用HybridUrlCodingStrategy或其子类安装可收藏页面。这会将页面标识符附加到URL,并确保后退按钮与可收藏的链接一起使用。