2013-08-24 62 views
0

我有一个问题,我找不到优雅的解决方案。我想使用NestedTree(或类似的东西)作为我的页面的简单菜单。每个节点链接到一个Page,显示由ID标识的内容。为了获得漂亮的网址和简单的书签,我想使用BookmarkablePageLinks链接到这些页面。使用BookmarkablePageLink时保留NestedTree的状态(折叠/展开节点)

但是这样做会每次创建一个全新的Page,从而破坏并重新创建树,重置它的状态。因此,每个链接点击完整的树会崩溃,用户必须再次打开才能选择另一个链接。 我无法找到一个解决方案,满足这些条件:

  • 每个标签/窗口保留一个独立的国家
  • 从它从打开的标签中打开新标签副本的状态,但随后独立
  • 易于使用,这意味着你没有手动设置,并为每个链接

如果当书签网址被称为没有恢复状态它会好起来的恢复状态。

对于Wicket 1.4,我能够使用pageMapName在会话中维护PageMaps及其菜单状态的映射。但是Wicket 1.5的功能发生了很大的变化(我现在使用6.8)。

我会很感激解决方案或提示如何做到这一点。

回答

1

但这样做它的方式创建一个完全新的一页每次,从而 摧毁和重建树,重置它的状态。因此,每个 链接点击完整的树会崩溃,用户必须再次打开它 以选择另一个链接。

树折叠,因为它的模型正在页面加载时重新创建。您可能将树的模型作为页面上的成员变量保存。为了解决这个问题,您应该将树的模型存储在会话对象中。这样你可以保持多个页面的状态。

+0

这就是我最初所做的。然后我切换到在会话中存储状态。但是当我打开两个选项卡时,这意味着麻烦:树的状态被混合/覆盖。你有建议跟踪几个页面的树状态吗? – Aranian

+0

在这种情况下,我会继续与svenmeier的答案。 – iluwatar

0

您可以在Wicket 1.5.x和6.x中管理自己的pageMaps。所有你需要的是一个小小的Javascript,请参阅AjaxNewWindowNotifyingBehavior获取灵感。

然后,您可以在页面地图专用密钥下的会话中保留树的扩展状态。