2011-05-22 62 views
1

关于产品与Apache Wicket的1.4.x的保护组件的状态

我有一个包含有一组搜索条件的形式的可收藏的,有状态的页面组件状态管理。用户搜索与所选标准匹配的项目,然后从页面导航(例如,转到详细的项目视图)。在某个时间点,用户可以使用书签链接返回到搜索页面。我希望将最后的搜索条件预先选为默认选项。但是,BookmarkablePageRequestTarget似乎在其#respond(RequestCycle)方法中创建了目标页面的新实例,因此失去了以前的状态(支持搜索表单的bean)。当然,我可以手动管理表单状态并将其存储在WebSession子类中,但我想知道是否有更好的方法可以在多个请求周期内保留组件状态,例如使Wicket重新使用该组件状态目标页面的现有实例?理想情况下,这将与书签链接。

回答

0

HybridUrlCodingStrategy或其子类装入您的书签页。这会将一个页面标识符附加到URL上,并确保后退按钮与可收藏的链接一起工作。

1

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

所以你真正需要做的是创建一个指向搜索页面例如,或致电setResponsePage()与页面实例或类似的链接,取决于你如何重定向用户。

通常情况下,除非实际情况比您描述的要复杂得多,否则您甚至都不应触摸请求目标。

+0

请原谅我的无知,但是可以创建一个指向页面特定实例的链接,更重要的是,如何获得对特定页面实例的引用? – oleg 2011-05-23 08:08:30

+0

@oleg对不起,我没有意识到这是问题所在。要创建一个指向现有页面的链接,您可以使用[PageLink](http://wicket.apache.org/apidocs/1.4/org/apache/wicket/markup/html/link/PageLink.html)类。你可以把它传递给你。所以当你从你的搜索页面打开你的详细信息页面时,你基本上都会传递'this',然后当详细信息页面必须链接回去时,可以使用该引用。 – biziclop 2011-05-23 09:24:07

+0

没错。麻烦的是,用户可以从详细视图导航到整个应用的不同区域,而不仅仅是搜索。在整个应用程序中拖动对SearchPage实例的引用是不可行的。 – oleg 2011-05-23 09:59:14