2011-05-22 59 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