Jsf 如何将部分选定的Treenode添加到p:tree中的SelectedNodes中

Jsf 如何将部分选定的Treenode添加到p:tree中的SelectedNodes中,jsf,primefaces,tree,Jsf,Primefaces,Tree,我在PrimeFaces中使用树组件。在此组件中,选定节点将自动添加到选定节点阵列中。但是,我需要将部分选定节点添加到此选定节点数组中。在这种情况下我能做什么,你能帮我吗 <p:tree id="treCard" value="#{authorizeBean.rootCard}" var="Folder" propagateSelectionUp="false" showUnselectableCheckbox="true" style="border:0px none;backg

我在PrimeFaces中使用树组件。在此组件中,选定节点将自动添加到选定节点阵列中。但是,我需要将部分选定节点添加到此选定节点数组中。在这种情况下我能做什么,你能帮我吗

    <p:tree id="treCard" value="#{authorizeBean.rootCard}" var="Folder" propagateSelectionUp="false" showUnselectableCheckbox="true" style="border:0px none;background:none; " selectionMode="checkbox" dynamic="true" selection="#{authorizeBean.selectedNodes}">  

     <p:treeNode class="authorizationPage" expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed" >
            <h:outputText value="#{Folder.tag}">
             </h:outputText>
     </p:treeNode>
      <p:treeNode class="authorizationPage" type="page" icon="ui-icon-document">
            <h:outputText value="#{Folder.tag}" />
      </p:treeNode>

       <p:treeNode class="authorizationPage" type="tab" icon="fa fa-bars">
                 <h:outputText value="#{Folder.tag}" />
      </p:treeNode>

      <p:treeNode class="authorizationPage" type="button" icon="fa fa-square-o">
               <h:outputText value="#{authorizeBean.btnName(Folder.tag)}" />
      </p:treeNode>

     </p:tree>

您必须创建一个根节点,并将要显示的部分附加到根节点示例create root:
root=new DefaultTreeNode(new YourJavaClass(),null)

然后,将它与partiel树对齐:
PartielTree=newdefaulttreenode(newyourjavaclass(),root)

您必须创建一个根节点,并将要显示的部分附加到根节点示例create root:
root=new DefaultTreeNode(new YourJavaClass(),null)

然后,将它与partiel树对齐:
PartielTree=newdefaulttreenode(newyourjavaclass(),root)

因为primeface不将部分选定节点包含到选定节点中, 因此,下面的函数是一种将部分选定节点包含到选定节点中的方法,每次使用selectedNodes数组之前必须调用该函数,否则selectedNodes将不包含部分选定节点。(调用everytime,因为primefaces会在每次请求时更新此数组-几乎;) 这里的“selectedNodes”是一个TreeNode数组,primeface framework将在其中存储选定的节点

public void updatePartialSelectedNodes() {

    Set<TreeNode> allSelected = new HashSet<>();

    if (selectedNodes != null && selectedNodes.length != 0) {
        for (TreeNode sel : selectedNodes)  {
            allSelected.add(sel);
            if (!((yourTreeDataObject)sel.getData()).isSupplier() && sel.getParent().isPartialSelected()) {
                allSelected.add(sel.getParent());
            }
        }
    }

    selectedNodes = new TreeNode[allSelected.size()]; 
    selectedNodes = allSelected.toArray(selectedNodes);
}

由于primeface不将部分选定节点包含到选定节点中, 因此,下面的函数是一种将部分选定节点包含到选定节点中的方法,每次使用selectedNodes数组之前必须调用该函数,否则selectedNodes将不包含部分选定节点。(调用everytime,因为primefaces会在每次请求时更新此数组-几乎;) 这里的“selectedNodes”是一个TreeNode数组,primeface framework将在其中存储选定的节点

public void updatePartialSelectedNodes() {

    Set<TreeNode> allSelected = new HashSet<>();

    if (selectedNodes != null && selectedNodes.length != 0) {
        for (TreeNode sel : selectedNodes)  {
            allSelected.add(sel);
            if (!((yourTreeDataObject)sel.getData()).isSupplier() && sel.getParent().isPartialSelected()) {
                allSelected.add(sel.getParent());
            }
        }
    }

    selectedNodes = new TreeNode[allSelected.size()]; 
    selectedNodes = allSelected.toArray(selectedNodes);
}

需要在同一数组中添加选定节点和部分选定节点。但是,现在未将部分选定节点添加到此数组@YagamiLightI不理解您的评论,请提供更多信息谢谢。需要将选定节点和部分选定节点添加到同一数组中。但是,现在未将部分选定节点添加到此数组@YagamiLightI不理解您的评论请提供更多信息谢谢。您找到解决方案了吗?最后,我在树上迭代查找部分选定的节点,并将它们添加到辅助数组中。然后将这个辅助数组和树用作支持bean的数组合并到一个新的节点中。最后,将这个新结构指定为保存所选节点的支持bean的变量的值。这在我的情况下起了作用。如果树不太大,我想执行不会有问题。你找到解决方案了吗?最后我在树上迭代寻找部分选定的节点,并将它们添加到辅助数组中。然后将这个辅助数组和树用作支持bean的数组合并到一个新的节点中。最后,将这个新结构指定为保存所选节点的支持bean的变量的值。这在我的情况下起了作用。如果树不是太大,我想表演是没有问题的。