2016-03-28 1 views
1

Ich möchte mehrere untergeordnete Knoten unter demselben Eltern zu selektieren oder markiert markieren. Ich sah diese Antwort: https://stackoverflow.com/a/17025086/1297935 und versucht, die folgende und es funktioniert nicht:Primes Baum mit Checkbox-Modus - Einstellung mehrerer untergeordnete Knoten von Managed Bean

@ManagedBean 
@ViewScoped 
public class BackingBean extends GenericViewBean { 

     private TreeNode[] selectedNodes; 

     public void showChildSelected(){ 
      ... 
      ... 
      selectedNodes = new TreeNode[]{p1child1,p1child2}; //two child nodes of same parent added 
      ... 
      ... 
      for(TreeNode treeNode : selectedNodes){ 
       treeNode.setSelected(true); 
      } 
      RequestContext.getCurrentInstance().update("listView:tree"); 
     } 

} 

Above Code zeigt nur das letzte Kind ausgewählt/aktiviert, um. Gibt es eine Lösung, mehrere untergeordnete Knoten des gleichen übergeordneten Elements aus Managed Bean auszuwählen? Vielen Dank im Voraus.

+0

Vielleicht [dies] (http://stackoverflow.com/a/33789199/3803447) wird helfen. In Ihrem Fall tun Sie einige "if" Bedingungen, wenn Sie nur bestimmte Knoten und Kinder wollen. – Geinmachi

+0

@Geinmachi - ich denke, der Code, den Sie darauf hingewiesen, tut das gleiche, die Zeile treeNode.setSelected (true); wählt tatsächlich den Knoten aus. Das Problem ist, dass nicht beide untergeordneten Knoten ausgewählt sind, sondern nur der letzte im Array TreeNode []. – dev009

Antwort

0

Ich glaube, es scheint ein Bug in Primefaces zu sein, da der TreeNode [] selectedNodes in der Managed Bean korrekt zwei ausgewählte Knoten anzeigt, aber im Array PrimeFaces.widgets.treeWidget.selections im Array PrimeFaces.widgets.treeWidget.selections nur einen rowKey anzeigt. Dies geschieht nur, wenn 2 Kinder desselben Elternteils ausgewählt werden. Und selbst nach der manuellen Auswahl des Treenodes mit setSelected (true) in Managed Bean ändert sich das Verhalten nicht.

Momentan benutze ich eine JavaScript Workaround von alexSunder: https://stackoverflow.com/a/25716716, in seinem Beitrag verwendet er PrimeFaces.widgets.treeWidget.selectNode (Knoten, still), aber ich habe einen Blick auf die tree.js und bekam eine andere Methode für Kontrollkästchen: PrimeFaces.widgets.treeWidget.toggleCheckboxNode (node). Folgendes ist die Änderung, die ich getan habe und es funktioniert !! Beschreibung

@ManagedBean 
@ViewScoped 
public class BackingBean extends GenericViewBean { 

     private TreeNode[] selectedNodes; 

     public void showChildSelected(){ 
      ... 
      ... 
      selectedNodes = new TreeNode[]{p1child1,p1child2}; //two child nodes of same parent added 
      ... 
      ... 
      for(TreeNode treeNode : selectedNodes){ 
       StringBuilder sb = new StringBuilder(); 
       sb.append("PrimeFaces.widgets.treeWidget.toggleCheckboxNode("); 
       sb.append("$(\"#listView\\\\:tree\\\\:"); 
       sb.append(treeNode.getRowKey()); 
       sb.append("\"))"); 
       RequestContext.getCurrentInstance().execute(sb.toString()); 
      } 
      RequestContext.getCurrentInstance().update("listView:tree"); 
     } 

} 

Methode:
PrimeFaces.widgets.treeWidget.selectNode (node, silent): silent Booleschen Parameter, wenn als falsch geleitet, die Knoten auswählen Ereignis nicht Feuer, aber nicht Ankreuzfeld Zustand nur ändern, wählt/hebt den Knoten hervor.

PrimeFaces.widgets.treeWidget.toggleCheckboxNode (Knoten): Kontrollkästchenstatus wird zusammen mit der Auswahl von Knoten umgeschaltet und dann Knotenauswahl Ereignis ausgelöst.

Verwandte Themen