重置p:树选择的值

tec*_*ch4 6 tree reset primefaces

我需要重置ap:tree中的选定值.我在表单中创建了一个重置​​按钮,我将我的p:tree元素放入其中.该按钮将树的选定值作为空值.在支持bean中,当我按下此按钮时,值清晰.但是在界面中,即使我刷新页面,旧的选定值仍然标记.这是我的代码:

电话号码:树

<p:tree id="treeClassifier" 
        value="#{navBarController.rootClassifier}" 
        var="node"          
        selectionMode="checkbox" 
        selection="#{navBarController.selectedClassifiers}" 
        style="height: 100px;width: 280px; margin-bottom: 0px; overflow: auto">
      <p:treeNode expandedIcon="ui-icon-folder-open" 
                  collapsedIcon="ui-icon-folder-collapsed">
         <h:outputText value="#{node.description}(#{node.code})"/> 
      </p:treeNode> 
</p:tree>
Run Code Online (Sandbox Code Playgroud)

创建树:

public TreeNode initTree(GenericTree<Classifier> tree) {
        GenericTreeNode<Classifier> root = tree.getRoot();
        TreeNode rootJSF = new DefaultTreeNode("root", null);
        for (GenericTreeNode<Classifier> gnt : root.getChildren()) {
            if (gnt.getData().getId() != -1) {
                TreeNode childTree = new DefaultTreeNode(gnt.getData(), rootJSF);
                //rootJSF.getChildren().add(childTree);
                //f_aux(gnt, rootJSF);
                addChildsToTree(gnt, childTree);
            }
        }
        return rootJSF;
    }

    public void addChildsToTree(GenericTreeNode<Classifier> parent, TreeNode parentJSF) {
        for (GenericTreeNode<Classifier> child : parent.getChildren()) {
            TreeNode newNode = new DefaultTreeNode(child.getData(), parentJSF);
            //parentJSF.getChildren().add(newNode);
            addChildsToTree(child, newNode);
        }
    }
Run Code Online (Sandbox Code Playgroud)

重置功能:

public void reset() {
       ....
       this.selectedClassifiers = null;
}
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?

tec*_*ch4 2

有了这些建议,我意识到我需要重置所选数组中的值并更新树中的节点。所以我在我的代码中做了以下更改:

public void reset() {
       ....
       this.selectedClassifiers = null;
       this.rootNode = initTree(tree);
}

    public TreeNode initTree(GenericTree<Classifier> tree) {
       GenericTreeNode<Classifier> root = tree.getRoot();
       TreeNode rootJSF = new DefaultTreeNode("root", null);
       rootJSF.setSelected(false);
       for (GenericTreeNode<Classifier> gnt : root.getChildren()) {
         if (gnt.getData().getId() != -1) {
            TreeNode childTree = new DefaultTreeNode(gnt.getData(), rootJSF);
            childTree.setSelected(false);
            addChildsToTree(gnt, childTree);
         }
    }
    return rootJSF;
 }

public void addChildsToTree(GenericTreeNode<Classifier> parent, TreeNode parentJSF) {
    for (GenericTreeNode<Classifier> child : parent.getChildren()) {
        TreeNode newNode = new DefaultTreeNode(child.getData(), parentJSF);
        newNode.setSelected(false);
        addChildsToTree(child, newNode);
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这些更改,我修复了我的代码。