2017-04-14 60 views
0

在Primefaces中,我想展开一个<p:treeNode>,当我点击其标签时,而不是当我点击小三角形时。 找不到任何.xhtml文件,却发现节点创建这样:p:treeNode在标签上展开点击

... 
final TreeNode parentNode = this.addNode(false, "Parent", this.root, targetView1); //first parameter means start expanded or not 
this.addNode(, "ChildNode", parentNode, "targetView2"); 
... 

这可能吗?谢谢。

+0

你可以(在纯html/javascript)总是添加一个简单的'点击'处理程序的标签,模拟点击相应的三角形... – Kukeltje

+0

你可以使用'p:commandLink' –

+0

我试图在没有太多成功的情况下自行实现Tree Node的这个功能。有谁会知道我可能会参考的任何例子,以便更好地了解我如何做到这一点?先谢谢你! –

回答

0

万一有人有兴趣的解决方案,我相信@Kukeltje指的是这里是我的解释:

XHTML:

<p:tree value="#{Bean.rootNode}" var="node" style="width: 100%" id="tree" selectionMode="single"> 
     <p:treeNode id="node">         
      <h:outputText value="#{node.name}" /> 
     </p:treeNode>  
     <p:ajax event="select" update=":form:tree" listener="#{Bean.onNodeSelect}" /> 
    </p:tree> 

豆:

public void onNodeSelect(NodeSelectEvent event) { 
    if (event.getTreeNode().isExpanded()) { 
     //closes if it is open. 
     event.getTreeNode().setExpanded(false); 
    } else { 
     //open if it is closed. 
     collapsingORexpanding(event.getTreeNode(), false);//this is so all children are closed under this node. trust me, you want this... 
     event.getTreeNode().setExpanded(true); 
    } 
} 

public void collapsingORexpanding(TreeNode n, boolean option) { 
    if (n.getChildren().isEmpty()) { 
     n.setSelected(false); 
    } else { 
     for (TreeNode s : n.getChildren()) { 
      collapsingORexpanding(s, option); 
     } 
     n.setExpanded(option); 
     n.setSelected(false); 
    } 
}