After searching on Google & cie, I can't find the way to collapse siblings nodes when expanding a node.
#EDIT : Tried on 3.0, here my code :
JSF file (xhtml) :
Code: Select all
<h:form id="indicators-form" prependId="true">
<p:tree id="indicators-tree"
value="#{indicatorsBean.treeMenu}" var="node"
selectionMode="single" selection="#{indicatorsBean.selectedNode}"
dynamic="true" cache="false">
<p:ajax event="expand" listener="#{indicatorsBean.collapseSiblings}" />
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
</h:form>
Code: Select all
@Component
@ManagedBean(name="indicatorsBean")
@SessionScoped
public class IndicatorsBean implements Serializable {
private TreeNode treeNode;
private TreeNode selectedNode;
...
public void collapseSiblings(NodeExpandEvent pExpandEvent) {
System.out.println("CollapseSiblings : " + pExpandEvent.getTreeNode().getData());
TreeNode tSelectedNode = pExpandEvent.getTreeNode();
for (TreeNode fTreeNode : tSelectedNode.getParent().getChildren()) {
if (!fTreeNode.equals(tSelectedNode)) {
fTreeNode.setExpanded(false);
}
}
}
...
}
JSF file (xhtml) :
Code: Select all
<h:form id="indicators-form" prependId="false">
<p:tree id="indicators-tree"
value="#{indicatorsBean.treeMenu}" var="node"
selectionMode="single" selection="#{indicatorsBean.selectedNode}"
dynamic="true" cache="false"
nodeExpandListener="#{indicatorsBean.collapseSiblings}"
nodeSelectListener="#{indicatorsBean.redirect}">
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
</h:form>
Code: Select all
@Component
@ManagedBean(name="indicatorsBean")
@SessionScoped
public class IndicatorsBean implements Serializable {
private TreeNode treeNode;
private TreeNode selectedNode;
...
public void collapseSiblings(NodeExpandEvent pExpandEvent) {
System.out.println("CollapseSiblings : " + pExpandEvent.getTreeNode().getData());
TreeNode tSelectedNode = pExpandEvent.getTreeNode();
for (TreeNode fTreeNode : tSelectedNode.getParent().getChildren()) {
if (!fTreeNode.equals(tSelectedNode)) {
fTreeNode.setExpanded(false);
}
}
}
...
}
My thought is that only the just-expanded node is re-renderer.
I also try to "force" the partial update, with :
Code: Select all
RequestContext.getCurrentInstance().addPartialUpdateTarget("indicators-tree");
Thanks you !
PS : I'm using PrimeFaces 2.2.1 on Mojarra 2.1.3