Java 跨多个请求周期保留组件状态

Java 跨多个请求周期保留组件状态,java,wicket,state,Java,Wicket,State,关于使用ApacheWicket 1.4.x进行组件状态管理的问题 我有一个可书签的、有状态的页面,其中包含一个带有设置搜索条件的表单。用户搜索与所选条件匹配的项目,然后离开页面(例如,转到详细项目视图)。在某个时间点,用户可以使用可设置书签的链接返回搜索页面。我希望将最后一个搜索条件预选为默认选择。但是,BookmarkablePageRequestTargetaways在其#respond(RequestCycle)方法中创建了目标页面的新实例,从而丢失了以前的状态(支持搜索表单的bean)

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

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


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

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

因此,您真正需要做的就是创建一个指向搜索页面实例的链接,或者使用页面实例调用
setResponsePage()
,这取决于您重定向用户的方式


通常,您甚至不应该触及请求目标,除非实际场景比您描述的场景复杂得多。

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

因此,您真正需要做的就是创建一个指向搜索页面实例的链接,或者使用页面实例调用
setResponsePage()
,这取决于您重定向用户的方式


通常,您甚至不应该触及请求目标,除非实际场景比您描述的场景复杂得多。

使用或其子类装载可书签页面。这将向URL添加页面标识符,并确保“后退”按钮可用于可书签链接。

使用或其子类装载可书签页面。这将在URL中附加一个页面标识符,并确保“后退”按钮与可书签链接一起工作。

请原谅我的无知,但能否创建指向页面特定实例的链接,更重要的是,如何获取对特定页面实例的引用?@oleg抱歉,我没有意识到这是问题所在。要创建指向现有页面的链接,可以使用该类。参考资料你可以把它传下去。因此,当您从搜索页面打开详细信息页面时,您基本上会传递
,然后当详细信息页面必须链接回时,您可以使用该引用。对。问题在于,用户可以从详细视图导航到应用程序的许多不同区域,而不仅仅是搜索。在整个应用程序中拖动对SearchPage实例的引用是不可行的。@oleg在这种情况下,最简单的事情就是将表单模型对象存储在web会话中。这并不像听起来那么糟糕。您只需扩展
WebSession
并为您的模型对象添加一个字段和getter/setter,在您的表单中,您有一个
model
,它从那里获取了它的值。请原谅我的无知,但是您是否可以创建指向页面特定实例的链接,更重要的是,如何获得对特定页面实例的引用?@oleg抱歉,我没有意识到这是个问题。要创建指向现有页面的链接,可以使用该类。参考资料你可以把它传下去。因此,当您从搜索页面打开详细信息页面时,您基本上会传递
,然后当详细信息页面必须链接回时,您可以使用该引用。对。问题在于,用户可以从详细视图导航到应用程序的许多不同区域,而不仅仅是搜索。在整个应用程序中拖动对SearchPage实例的引用是不可行的。@oleg在这种情况下,最简单的事情就是将表单模型对象存储在web会话中。这并不像听起来那么糟糕。您只需扩展
WebSession
并为您的模型对象添加一个字段和getter/setter,在您的表单中有一个
model
,它从中获取值。