Another example here.
XHTML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head> <f:facet name="first"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/> </f:facet> <title>Tree provides three selection modes, "single", "multiple" and "checkbox".</title> </h:head> <h:body id="bodyView"> <h:form> <p:growl id="msgs" showDetail="true" escape="false"/> <h3 style="margin-top:0">Single</h3> <p:tree value="#{treeSelectionView.root1}" id="simpleSelection" var="doc" selectionMode="single" selection="#{treeSelectionView.selectedNode}"> <p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed"> <h:outputText value="#{doc.name}"/> </p:treeNode> <p:treeNode type="document" icon="ui-icon-document"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="picture" icon="ui-icon-image"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="mp3" icon="ui-icon-video"> <h:outputText value="#{doc.name}" /> </p:treeNode> </p:tree> <p:commandButton value="Display" update="msgs" icon="ui-icon-newwin" actionListener="#{treeSelectionView.displaySelectedSingle}"/> <p:commandButton value="Reset" update="simpleSelection" icon="ui-icon-newwin" process="@this" actionListener="#{treeSelectionView.resetSelectedNode}" /> <h3>Multiple with metakey</h3> <p:tree id="multipleSelection" value="#{treeSelectionView.root1}" var="doc" selectionMode="multiple" selection="#{treeSelectionView.selectedNodes1}"> <p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed"> <h:outputText value="#{doc.name}"/> </p:treeNode> <p:treeNode type="document" icon="ui-icon-document"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="picture" icon="ui-icon-image"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="mp3" icon="ui-icon-video"> <h:outputText value="#{doc.name}" /> </p:treeNode> </p:tree> <p:commandButton value="Display" update="msgs" icon="ui-icon-newwin" actionListener="#{treeSelectionView.displaySelectedMultiple(treeSelectionView.selectedNodes1)}"/> <p:commandButton value="Reset" update="multipleSelection" icon="ui-icon-newwin" process="@this" actionListener="#{treeSelectionView.resetSelectedNode}" /> <h3>Multiple with Checkbox</h3> <p:tree id="checkboxSelection" value="#{treeSelectionView.root1}" var="doc" selectionMode="checkbox" selection="#{treeSelectionView.selectedNodes2}"> <p:treeNode icon="ui-icon-note"> <h:outputText value="#{doc.name}"/> </p:treeNode> <p:treeNode type="document" icon="ui-icon-document"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="picture" icon="ui-icon-image"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="mp3" icon="ui-icon-video"> <h:outputText value="#{doc.name}" /> </p:treeNode> </p:tree> <p:commandButton value="Display" update="msgs" icon="ui-icon-newwin" actionListener="#{treeSelectionView.displaySelectedMultiple(treeSelectionView.selectedNodes2)}"/> <p:commandButton value="Reset" update="checkboxSelection" icon="ui-icon-newwin" process="@this" actionListener="#{treeSelectionView.resetSelectedNode}" /> </h:form> </h:body> </html>
managedbean treeSelectionView
import java.io.Serializable; import javax.annotation.PostConstruct; import javax.faces.application.Application; import javax.faces.application.FacesMessage; import javax.faces.application.ViewHandler; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import org.primefaces.model.TreeNode; import org.primefaces.showcase.service.DocumentService; @ManagedBean(name = "treeSelectionView") @ViewScoped public class SelectionView implements Serializable { private TreeNode root1; private TreeNode root2; private TreeNode root3; private TreeNode selectedNode; private TreeNode[] selectedNodes1; private TreeNode[] selectedNodes2; @ManagedProperty("#{documentService}") private DocumentService service; @PostConstruct public void init() { root1 = service.createDocuments(); root2 = service.createDocuments(); root3 = service.createDocuments(); } public TreeNode getRoot1() { return root1; } public TreeNode getRoot2() { return root2; } public TreeNode getRoot3() { return root3; } public TreeNode getSelectedNode() { return selectedNode; } public void setSelectedNode(TreeNode selectedNode) { this.selectedNode = selectedNode; } public TreeNode[] getSelectedNodes1() { return selectedNodes1; } public void setSelectedNodes1(TreeNode[] selectedNodes1) { this.selectedNodes1 = selectedNodes1; } public TreeNode[] getSelectedNodes2() { return selectedNodes2; } public void setSelectedNodes2(TreeNode[] selectedNodes2) { this.selectedNodes2 = selectedNodes2; } public void setService(DocumentService service) { this.service = service; } public void displaySelectedSingle() { if (selectedNode != null) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", selectedNode.getData().toString()); FacesContext.getCurrentInstance().addMessage(null, message); } } public void displaySelectedMultiple(TreeNode[] nodes) { if (nodes != null && nodes.length > 0) { StringBuilder builder = new StringBuilder(); for (TreeNode node : nodes) { builder.append(node.getData().toString()); builder.append("<br />"); } FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", builder.toString()); FacesContext.getCurrentInstance().addMessage(null, message); } } public void resetSelectedNode(ActionEvent event) { FacesContext context = FacesContext.getCurrentInstance(); Application application = context.getApplication(); ViewHandler viewHandler = application.getViewHandler(); UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId()); context.setViewRoot(viewRoot); context.renderResponse();
managedbean documentService
import javax.faces.bean.ApplicationScoped; import javax.faces.bean.ManagedBean; import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.TreeNode; import org.primefaces.showcase.domain.Document; @ManagedBean(name = "documentService") @ApplicationScoped public class DocumentService { public TreeNode createDocuments() { TreeNode root = new DefaultTreeNode(new Document("Files", "-", "Folder"), null); TreeNode documents = new DefaultTreeNode(new Document("Documents", "-", "Folder"), root); TreeNode pictures = new DefaultTreeNode(new Document("Pictures", "-", "Folder"), root); TreeNode movies = new DefaultTreeNode(new Document("Movies", "-", "Folder"), root); TreeNode work = new DefaultTreeNode(new Document("Work", "-", "Folder"), documents); TreeNode primefaces = new DefaultTreeNode(new Document("PrimeFaces", "-", "Folder"), documents); //Documents TreeNode expenses = new DefaultTreeNode("document", new Document("Expenses.doc", "30 KB", "Word Document"), work); TreeNode resume = new DefaultTreeNode("document", new Document("Resume.doc", "10 KB", "Word Document"), work); TreeNode refdoc = new DefaultTreeNode("document", new Document("RefDoc.pages", "40 KB", "Pages Document"), primefaces); //Pictures TreeNode barca = new DefaultTreeNode("picture", new Document("barcelona.jpg", "30 KB", "JPEG Image"), pictures); TreeNode primelogo = new DefaultTreeNode("picture", new Document("logo.jpg", "45 KB", "JPEG Image"), pictures); TreeNode optimus = new DefaultTreeNode("picture", new Document("optimusprime.png", "96 KB", "PNG Image"), pictures); //Movies TreeNode pacino = new DefaultTreeNode(new Document("Al Pacino", "-", "Folder"), movies); TreeNode deniro = new DefaultTreeNode(new Document("Robert De Niro", "-", "Folder"), movies); TreeNode scarface = new DefaultTreeNode("mp3", new Document("Scarface", "15 GB", "Movie File"), pacino); TreeNode carlitosWay = new DefaultTreeNode("mp3", new Document("Carlitos' Way", "24 GB", "Movie File"), pacino); TreeNode goodfellas = new DefaultTreeNode("mp3", new Document("Goodfellas", "23 GB", "Movie File"), deniro); TreeNode untouchables = new DefaultTreeNode("mp3", new Document("Untouchables", "17 GB", "Movie File"), deniro); return root; } }
domain
import java.io.Serializable; public class Document implements Serializable, Comparable<Document> { private String name; private String size; private String type; public Document(String name, String size, String type) { this.name = name; this.size = size; this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } public String getType() { return type; } public void setType(String type) { this.type = type; } //Eclipse Generated hashCode and equals @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((size == null) ? 0 : size.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } Document other = (Document) obj; if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } if (size == null) { if (other.size != null) { return false; } } else if (!size.equals(other.size)) { return false; } if (type == null) { if (other.type != null) { return false; } } else if (!type.equals(other.type)) { return false; } return true; } @Override public String toString() { return name; } public int compareTo(Document document) { return this.getName().compareTo(document.getName()); } }