ContextMenu has special integration with Tree. Even different menus can be assigned to different node types by matching node types.
Documentation<h:form> <p:growl id="messages" showDetail="true" /> <p:tree id="docs" value="#{treeContextMenuView.root}" var="doc" selectionMode="single" selection="#{treeContextMenuView.selectedNode}" dynamic="true"> <p:treeNode expandedIcon="pi pi-folder-open" collapsedIcon="pi pi-folder"> <h:outputText value="#{doc.name}"/> </p:treeNode> <p:treeNode type="document" icon="pi pi-file"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="picture" icon="pi pi-image"> <h:outputText value="#{doc.name}" /> </p:treeNode> <p:treeNode type="mp3" icon="pi pi-video"> <h:outputText value="#{doc.name}" /> </p:treeNode> </p:tree> <p:contextMenu for="docs"> <p:menuitem value="View" update="messages" action="#{treeContextMenuView.displaySelectedSingle}" icon="pi pi-search" /> <p:menuitem value="Delete" update="docs" action="#{treeContextMenuView.deleteNode}" icon="pi pi-times"/> </p:contextMenu> </h:form>
@Named("treeContextMenuView") @ViewScoped public class ContextMenuView implements Serializable { private TreeNode root; private TreeNode selectedNode; @Inject private DocumentService service; @PostConstruct public void init() { root = service.createDocuments(); } public TreeNode getRoot() { return root; } public TreeNode getSelectedNode() { return selectedNode; } public void setSelectedNode(TreeNode selectedNode) { this.selectedNode = selectedNode; } 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 deleteNode() { selectedNode.getChildren().clear(); selectedNode.getParent().getChildren().remove(selectedNode); selectedNode.setParent(null); selectedNode = null; } }
@Named @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; } public TreeNode createCheckboxDocuments() { TreeNode root = new CheckboxTreeNode(new Document("Files", "-", "Folder"), null); TreeNode documents = new CheckboxTreeNode(new Document("Documents", "-", "Folder"), root); TreeNode pictures = new CheckboxTreeNode(new Document("Pictures", "-", "Folder"), root); TreeNode movies = new CheckboxTreeNode(new Document("Movies", "-", "Folder"), root); TreeNode work = new CheckboxTreeNode(new Document("Work", "-", "Folder"), documents); TreeNode primefaces = new CheckboxTreeNode(new Document("PrimeFaces", "-", "Folder"), documents); //Documents TreeNode expenses = new CheckboxTreeNode("document", new Document("Expenses.doc", "30 KB", "Word Document"), work); TreeNode resume = new CheckboxTreeNode("document", new Document("Resume.doc", "10 KB", "Word Document"), work); TreeNode refdoc = new CheckboxTreeNode("document", new Document("RefDoc.pages", "40 KB", "Pages Document"), primefaces); //Pictures TreeNode barca = new CheckboxTreeNode("picture", new Document("barcelona.jpg", "30 KB", "JPEG Image"), pictures); TreeNode primelogo = new CheckboxTreeNode("picture", new Document("logo.jpg", "45 KB", "JPEG Image"), pictures); TreeNode optimus = new CheckboxTreeNode("picture", new Document("optimusprime.png", "96 KB", "PNG Image"), pictures); //Movies TreeNode pacino = new CheckboxTreeNode(new Document("Al Pacino", "-", "Folder"), movies); TreeNode deniro = new CheckboxTreeNode(new Document("Robert De Niro", "-", "Folder"), movies); TreeNode scarface = new CheckboxTreeNode("mp3", new Document("Scarface", "15 GB", "Movie File"), pacino); TreeNode carlitosWay = new CheckboxTreeNode("mp3", new Document("Carlitos' Way", "24 GB", "Movie File"), pacino); TreeNode goodfellas = new CheckboxTreeNode("mp3", new Document("Goodfellas", "23 GB", "Movie File"), deniro); TreeNode untouchables = new CheckboxTreeNode("mp3", new Document("Untouchables", "17 GB", "Movie File"), deniro); return root; } }
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()); } }