Horizontal tree has two modes, in client mode all nodes are available at client side whereas in ajax mode only expanded nodes are available.
Documentation<h:form> <h3 style="margin-top:0">Client</h3> <p:tree value="#{treeBasicView.root}" var="node" orientation="horizontal"> <p:treeNode> <h:outputText value="#{node}" /> </p:treeNode> </p:tree> <h3>Ajax</h3> <p:tree value="#{treeBasicView.root}" var="node" dynamic="true" orientation="horizontal"> <p:treeNode> <h:outputText value="#{node}" /> </p:treeNode> </p:tree> </h:form>
@Named("treeBasicView") @ViewScoped public class BasicView implements Serializable { private TreeNode root; @PostConstruct public void init() { root = new DefaultTreeNode("Root", null); TreeNode node0 = new DefaultTreeNode("Node 0", root); TreeNode node1 = new DefaultTreeNode("Node 1", root); TreeNode node00 = new DefaultTreeNode("Node 0.0", node0); TreeNode node01 = new DefaultTreeNode("Node 0.1", node0); TreeNode node10 = new DefaultTreeNode("Node 1.0", node1); node1.getChildren().add(new DefaultTreeNode("Node 1.1")); node00.getChildren().add(new DefaultTreeNode("Node 0.0.0")); node00.getChildren().add(new DefaultTreeNode("Node 0.0.1")); node01.getChildren().add(new DefaultTreeNode("Node 0.1.0")); node10.getChildren().add(new DefaultTreeNode("Node 1.0.0")); root.getChildren().add(new DefaultTreeNode("Node 2")); } public TreeNode getRoot() { return root; } }