【问题标题】:Add and delete nodes in primefaces treeTable在 primefaces 树表中添加和删除节点
【发布时间】:2013-05-14 13:45:27
【问题描述】:

我有这个:

<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中添加和删除treeNodes?我可以在 back bean 中放什么?

谢谢

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    添加删除节点的一​​种解决方案如下:

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

    【讨论】:

      【解决方案2】:

      我认为删除节点时不需要使用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 的整棵树。

      【讨论】:

        猜你喜欢
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 2012-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多