tree - 瓦丁树。延迟加载

标签 tree lazy-loading vaadin

我正在尝试在节点展开事件上实现元素的延迟加载。
这有一个问题。
因此,在展开事件中,我使用为展开的节点创建新项目

HierarchicalContainer.addItem() 

但是这个方法调用
containerItemSetChange()

AbstractSelect 类的方法。那里
itemIdMapper.removeAll()

叫做。所以 map 被清理并且树的所有项目都在 map 中获得新的ID。当服务器的答案传到客户端时,它不知道这个新的 id ,因为它有(扩展节点的)以前的 id,因此不会添加新项目,也不会在客户端呈现。

我试过https://vaadin.com/forum/-/message_boards/view_message/131802 .但是,实际上,整个树的数据是从服务器发送到客户端的。我希望只发送特定节点所需的数据。所以没有性能“+”。

谁能帮我解决这个问题?提前致谢。



其实我也需要改变领域
partialUpdate

为真,因为首先服务器将树的所有内容发送到客户端。

最佳答案

解释你的问题;大多数人会假设树在您的对象上使用您的 hashcode/equals 实现(这就是它们存在的原因!)进行比较。你创建你的树,做很多其他的事情,包括修改你放在树中的项目,然后尝试使用这些项目作为键来修改树。

这就是问题所在。

当您调用 addItem() 时,树基本上会拍摄项目的哈希码快照。 .它在内部使用该哈希码将客户端工件映射到服务器上的对象。对于任何后续 removeItem()等调用它只是使用快照的哈希码,而不是像任何其他普通容器一样调用对象的哈希码/等于方法。如果你通过 removeItem() 调试它你会很快看到问题所在。

  • 简单的解决方案:将对象放入
    树。但如果你这样做,你需要重建整棵树。
  • 更好的解决方案:创建一个代理对象(TreeNode 或其他东西)
    包含该项目但提供它自己的等于/哈希码
    方法。
  • 最佳解决方案: Vaadin 对他们的树进行改造,使其能够正常运行
    就像一个标准的 java 容器。就目前而言,这个古怪的
    javadoc中没有提到行为的方法
    会失败。

  • 希望这可以帮助某人。

    关于tree - 瓦丁树。延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773133/

    相关文章:

    php - 如何使用 SQL 闭包表模式获取所有同级(无需子查询!)

    c++ - 状态机实现

    java - 具有递归结构的 jackson 序列化

    java - 如何找到公式的所有可能解,例如 100*7-8*3+7? (10 只猫中有 8 只做倒计时求解器)

    java - vaadin中的文件上传和下载

    grails - 无法延迟初始化集合,没有 session 或 session 被关闭

    javascript - 如何测试 Dojo/Javascript 树延迟加载是否正常工作?

    javascript - 使用延迟加载禁用图像的默认灯箱

    spring - 集成spring和vaadin

    java - Vaadin Crud 用户界面。轴排序不正确