2013-05-14 2 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> 

Как добавлять и удалять treeNodes в 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

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); 
} 

Если вам нужно проверить, является ли nodeToDelete является потомком rootNode также мо чтобы начать с nodeToDelete и поднимитесь до тех пор, пока вы не достигнете своего корня, а затем сравните его с rootNode вместо того, чтобы пересечь все дерево с помощью BFS.

Смежные вопросы