2013-05-14 92 views
0

我有这样的:在primefaces添加和删除节点treetable中

<p:treeTable id="#{treeTableId}" value="#{tableBeanRoot}" var="element" 
    resizableColumns="true" 
    selection="#{budgetTemplateElementBean.selectedNode}" 
    selectionMode="single" widgetVar="#{treeTableId}widget"> 

    <f:facet name="header"> 

    </f:facet> 

    <p:column style="width:150px"> 
      ..... 
    </p:column> 
      ..... 
    <f:facet name="footer"> 
     <p:commandButton value="#{msg.addChildNode}" 
      actionListener="#{actionBean.addChildNodeAction}" 
      process="@this,#{treeTableId}" update="#{treeTableId} :growl" /> 
     <p:commandButton value="#{msg.deleteNode}" 
      actionListener="#{actionBean.deleteNodeAction}" 
      process="@this,#{treeTableId}" update="#{treeTableId} :growl" /> 
    </f:facet> 
</p:treeTable> 

在Primefaces treetable中如何添加和删除树节点?我可以把什么东西放回到豆子里?

感谢

回答

7

添加删除节点的一​​种解决方案可以是这样的:

public boolean removeElemetOfTreeNode(TreeNode rootNode, 
     TreeNode nodeToDelete) { 
    if (rootNode.getChildren().remove(nodeToDelete)) { 
     return true; 
    } else { 
     for (TreeNode childNode : rootNode.getChildren()) { 
      if (childNode.getChildCount() > 0) { 
       return removeElemetOfTreeNode(childNode, nodeToDelete); 
      } 

     } 
     return false; 
    } 
} 

public void addNodeAction(ActionEvent event) { 
    if (selectedNode == null) { 
     // TODO: añadir excepcion no seleccionado 
    } 
    Random randomGenerator = new Random(); 
    TreeNode pepe = new DefaultTreeNode(new Configuration("new node" 
      + randomGenerator.nextInt(100), false, "new node" 
      + randomGenerator.nextInt(100), false), 
      selectedNode.getParent()); 
    return; 
} 

public void addChildNodeAction(ActionEvent event) { 
    if (selectedNode == null) { 
     // TODO: añadir excepcion no seleccionado 
    } 
    Random randomGenerator = new Random(); 
    TreeNode pepe = new DefaultTreeNode(new Configuration("new node" 
      + randomGenerator.nextInt(100), false, "new node" 
      + randomGenerator.nextInt(100), false), selectedNode); 
    return; 
} 
+0

谢谢,让我们试试 – Luermo 2013-05-14 13:51:01

1

我觉得没有必要删除节点本身知道节点时BFS遍历树的父:

public void removeElemetOfTreeNode(TreeNode nodeToDelete) { 
    TreeNode parent = nodeToDelete.getParent(); 
    if(parent == null){ 
     // throw exception or handle case of root node differently 
    } 
    parent.getChildren().remove(nodeToDelete); 
} 

如果您需要检查是否nodeToDeleterootNode的后代,也莫重新从nodeToDelete开始,直到达到根,然后将其与rootNode进行比较,而不是使用BFS遍历整个树。