2016-03-28 1 views
1

Я хочу установить несколько дочерних узлов под одним и тем же родителем для выбора или отметки отмечены. Я видел этот ответ: https://stackoverflow.com/a/17025086/1297935 и попытался следующие, и он не работает:Дерево прайс-листов с режимом checkbox - установка нескольких дочерних узлов из управляемого компонента

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

} 

Приведенный выше код показывает только последний ребенок выбран/чек с пометкой. Есть ли решение выбрать несколько дочерних узлов одного и того же родителя из управляемого компонента? Спасибо заранее.

+0

Возможно, [это] (http://stackoverflow.com/a/33789199/3803447) поможет. В вашем случае выполняйте некоторые условия 'if', если вы хотите только определенный узел и детей. – Geinmachi

+0

@Geinmachi - я думаю, что код, который вы указали, делает cheething, строка treeNode.setSelected (true); фактически выбирает узел. проблема в том, что он не показывает, что оба дочерних узла выбраны только последним в массиве TreeNode []. – dev009

ответ

0

Я думаю, что это кажется некоторой ошибкой в ​​Primefaces, поскольку TreeNode [] selectedNodes в управляемом компоненте правильно отображает 2 выбранных узла, но в объекте Javascript массив PrimeFaces.widgets.treeWidget.selections показывает только один rowKey. Это происходит только при выборе двух детей одного и того же родителя. И даже после ручного выбора treenode с помощью setSelected (true) в Managed Bean нет изменений в Behavior.

В настоящее время я использую обходной путь Javascript отправленного alexSunder: https://stackoverflow.com/a/25716716, на своем посту он использует PrimeFaces.widgets.treeWidget.selectNode (узел, бесшумный), но я должен был смотреть на tree.js и получил еще один способ checkboxes: PrimeFaces.widgets.treeWidget.toggleCheckboxNode (узел). Ниже приводится изменение, которое я сделал, и оно работает!

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

} 

Метод Описание:
PrimeFaces.widgets.treeWidget.selectNode (узел, молчит): бесшумный логический параметр, когда передаются как ложные, не будет срабатывать Узел Выберите событие, но не меняет флажок состояние, только выбирает/выделяет узел.

PrimeFaces.widgets.treeWidget.toggleCheckboxNode (node): состояние флажка переключается вместе с выбором узла, а затем выполняется событие выбора узла.

Смежные вопросы