2016-03-28 2 views
1

同じ親の下にある複数の子ノードを選択またはマークするように設定したい。私はこの答えを見た:https://stackoverflow.com/a/17025086/1297935をし、次のことを試してみました、それが動作しません。コードの上チェックボックスモードのPrimefacesツリー - マネージド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"); 
     } 

} 

のみチェックマーク/最後の子が選択表示されます。マネージドBeanから同じ親の複数の子ノードを選択するソリューションはありますか? ありがとうございます。

+0

多分[this](http://stackoverflow.com/a/33789199/3803447)が役立ちます。あなたのケースでは、特定のノードと子のみを必要とする場合、いくつかの 'if'条件を実行します。 – Geinmachi

+0

@Geinmachi - あなたが指摘したコードは、何かをしていると思います。ラインtreeNode.setSelected(true);実際にノードを選択します。問題は、両方の子ノードがTreeNode []配列の最後のノードのみが選択されていることを示していないことです。 – dev009

答えて

0

Managed BeanのTreeNode [] selectedNodesが2つの選択されたノードを正しく示していますが、JavascriptオブジェクトPrimeFaces.widgets.treeWidget.selections配列には1つのrowKeyしか表示されないため、Primefacesのバグがあるようです。これは、同じ親の2人の子供が選択された場合にのみ発生します。また、Managed BeanでsetSelected(true)を使用して手動でtreenodeを選択した後でも、Behaviorに変更はありません。

現在、私は、alexSunder:https://stackoverflow.com/a/25716716によって投稿されたJavascriptの回避策を使用しています。自分の投稿にPrimeFaces.widgets.treeWidget.selectNode(node、silent)を使用していますが、tree.jsを見て、チェックボックス: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(ノード):チェックボックスの状態は、ノードの選択とともにトグルされ、次にノード選択イベントが発生します。

関連する問題