当我有重复的ItemId时,如何在Vaadin中创建分层容器?如果没有,替代方案是什么



我想创建一个具有n级别层次结构的用户树。我有一个POJO对象,其中有id,parent_id

问题是用户可以属于多个组。所以,当我尝试这样做时,

 while (iterator.hasNext()) {
      val user_pojo_obj = iterator.next()
      val key = user_pojo_obj.id
      val parent_key = user_pojo_obj.family_id    
      var child: Item = container.addItem(key)
      child.getItemProperty("caption").asInstanceOf[Property[Any]].setValue(user_pojo_obj.name)
      child.getItemProperty("POJOobj").asInstanceOf[Property[Any]].setValue(user_pojo_obj)
      container.setParent(key, parent_key)
    }

我在第二行得到了NullPointerException,据我所知,这是因为容器中的addItem()重复,返回null
如果不能改进,请给我推荐替代品。(使用Scala)

谢谢。。

据我所知,您不能有多个父级或重复的itemId s。以下伪代码是构建树状结构的替代解决方案(node是您的POJO):

counter = 0;
function process(nodes, parent) {
    foreach (node in nodes) {
        newId = counter++;
        item = container.addItem(newId);
        // set item caption etc.
        if (parent not null)
            container.setParent(newId, parent)
        process(getNodesWithParent(node), newId);
    }
}
process(getNodesWithParent(null), null);

方法getNodesWithParent需要由您定义。我猜您将使用迭代器,遍历POJO,并返回那些具有family_id等于参数的id的POJO。总体性能取决于您对getNodesWithParent的实现,因此,如果您有一个大的数据集,您应该注意提高效率。

最新更新