2016-07-27 24 views
1

Ich benutze Tree-Komponente in PrimeFaces. In dieser Komponente werden ausgewählte Knoten automatisch in ausgewählten Knoten-Arrays hinzugefügt. Ich muss jedoch teilweise ausgewählte Knoten in dieses ausgewählte Knoten-Array einfügen. Was kann ich in dieser Situation tun, kannst du mir helfen?Wie man teilweise ausgewählten Treenode in SelectedNodes in p hinzufügt: Baum

<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> 
+0

haben Sie die Lösung? – nespapu

+0

Schließlich habe ich am Ende über den Baum iteriert, um nach teilweise ausgewählten Knoten zu suchen und sie zu einem Hilfsarray hinzuzufügen. Dann werden dieses Hilfsarray und das Array, das als Backing-Bean verwendet wird, durch die Baumstruktur für ausgewählte Knoten in einem neuen zusammengeführt. Schließlich wird diese neue Struktur als Wert für die Variable zugewiesen, die die Backing-Bean für ausgewählte Knoten enthält. Das war in meinem Fall der Fall. Ich denke, es gibt kein Problem, wenn der Baum nicht zu groß ist. – nespapu

Antwort

0

Sie müssen einen Wurzelknoten erstellen und den Teil anhängen, dass Sie Ihre Wurzel Beispiel zeigen wollen, erstellen root: root= new DefaultTreeNode(new YourJavaClass(), null); nach, dass Sie es mit Ihren partiel Bäumen gesäumten: PartielTree = new DefaultTreeNode(new YourJavaClass(), root);

+0

Es ist erforderlich, dass ausgewählte Knoten und teilweise ausgewählte Knoten im selben Array hinzugefügt werden. Nun werden jedoch teilweise ausgewählte Knoten diesem Array nicht hinzugefügt. @YagamiLight –

+0

Ich habe Ihren Kommentar nicht verstanden bitte geben Sie weitere Informationen, danke. –

0

Wie primeface tut nicht Teil ausgewählten Knoten in ausgewählten Knoten, so unter Funktion ist ein Hack, um teilweise ausgewählte Knoten in die ausgewählten Knoten und muss vor der Verwendung selectedNodes Array jedes Mal enthalten, sonst selectedNodes nicht teilweise ausgewählte Knoten enthalten. (Aufruf jedes Mal, weil primefaces dieses Array aktualisiert auf jeder Anfrage- ziemlich viel;)) hier ‚selectedNodes‘ ist eine Reihe von TreeNode wo primeface Rahmen wird ausgewählten Knoten

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 werden Speichern: Andere Option und wahrscheinlich gut Wenn die Länge Ihres Baums nicht größer als 100 Knoten und nicht tiefer als 2 ist, können Sie über den Baumstammknoten iterieren und mit TreeNode.isSelected() oder TreeNodes.isPartialSelected() überprüfen, da das primefaces-Framework es ebenfalls aktualisiert im Hauptbaum, ob der Knoten ausgewählt oder teilweise ausgewählt oder nicht ausgewählt ist.

für eine Zwei-Ebenen tief .. ein Beispiel

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