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

时间:2016-07-27 14:51:57

标签: jsf primefaces tree

我在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>

2 个答案:

答案 0 :(得分:0)

您必须创建根节点并将要显示的部分附加到根示例创建根目录:PartielTree = new DefaultTreeNode( new YourJavaClass(), root); 之后,你用你的伙伴树排成一行:RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://(www\.)?foo.com [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?foo.com.*$ [NC] RewriteRule .*\.(gif|jpg)$ - [F]

答案 1 :(得分:0)

由于primeface不包括部分选定节点到选定节点, 所以下面的函数是将部分选定节点包含到所选节点中的hack,并且必须在每次使用selectedNodes数组之前调用它,否则selectedNodes将不包含部分选定的节点。 (每次调用因为primefaces在每个请求上更新这个数组 - 几乎;)) 这里&#39; selectedNodes&#39;是一个TreeNode数组,其中primeface框架将存储选定的节点

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

Edit1:其他选项,如果树的长度不超过100个节点且不超过2个级别,则可能很好。您可以遍历树根节点子节点并使用TreeNode.isSelected()或TreeNodes进行检查。 isPartialSelected(),因为primefaces框架也会在主树中更新它,无论节点是选中还是部分选中或未选中。

深度为两级......一个例子

for (TreeNode tn : this.treeRoot.getChildren()) { 
    for (TreeNode child : tn.getChildren()) { 
        if (child.isSelected()) { 
selectionString.append(((TreeNodeObjectDataWrapper)child.getData()).getId()); 
            } 
        } 
    }