当我有重复的ItemIds时,如何在Vaadin中创建Hierarchical Container?如果否,替代方案是什么?

时间:2016-04-05 14:31:12

标签: scala vaadin7

我想创建一个具有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)

Thanxx ..

1 个答案:

答案 0 :(得分:1)

据我所知,您不能拥有多个父母或重复itemId。以下伪代码是构建树状结构的替代解决方案(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的那些。总体性能取决于getNodesWithParent的实现,因此如果您拥有大型数据集,则应该关注效率。