Java 使用BookmarkablePageLink时保留嵌套树的状态(折叠/展开的节点)

Java 使用BookmarkablePageLink时保留嵌套树的状态(折叠/展开的节点),java,tree,wicket,Java,Tree,Wicket,我有一个问题,我找不到一个优雅的解决方案。我想使用NestedTree(或类似的东西)作为我的页面的简单菜单。每个节点都链接到一个页面,该页面显示由ID标识的内容。要获得好的URL和方便的书签,我想使用BookmarkablePageLinks链接到这些页面 但这样做每次都会创建一个全新的页面,从而破坏并重新创建树,重置其状态。因此,每单击一个链接,整个树就会折叠,用户必须再次打开它以选择另一个链接。 我找不到满足以下标准的解决方案: 每个选项卡/窗口都保留一个单独的状态 打开一个新选项卡会复

我有一个问题,我找不到一个优雅的解决方案。我想使用
NestedTree
(或类似的东西)作为我的页面的简单菜单。每个节点都链接到一个
页面
,该页面显示由ID标识的内容。要获得好的URL和方便的书签,我想使用
BookmarkablePageLinks
链接到这些页面

但这样做每次都会创建一个全新的
页面
,从而破坏并重新创建树,重置其状态。因此,每单击一个链接,整个树就会折叠,用户必须再次打开它以选择另一个链接。 我找不到满足以下标准的解决方案:

  • 每个选项卡/窗口都保留一个单独的状态
  • 打开一个新选项卡会复制从中打开的选项卡的状态,但随后是独立的
  • 易于使用,这意味着您不必手动设置和恢复每个链接的状态
如果在调用带书签的URL时不恢复状态,则可以

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

我将非常感谢关于如何做到这一点的解决方案或提示

但这样做每次都会创造一个全新的页面,因此 销毁并重新创建树,重置其状态。每个人都是这样 单击链接整个树将折叠,用户必须打开它 再次选择另一个链接


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

您可以在Wicket 1.5.x和6.x中管理自己的页面映射。您所需要的只是一点Javascript,请参阅AjaxNewWindowNotifyingBehavior以获取灵感


然后,您可以在pageMap特定键下保持会话中树的扩展状态。

这就是我最初所做的。然后我切换到在会话中存储状态。但当我打开两个选项卡时,这意味着麻烦:树的状态被混合/覆盖。你有没有建议跟踪几页的树状态?如果是这样,我会继续斯文迈耶的回答。