Horizontal Tree - ContextMenu

ContextMenu has special integration with Tree. Even different menus can be assigned to different node types by matching node types.

Files
<h:form>
    <p:growl id="messages" showDetail="true" />
    
    <p:tree id="docs" value="#{treeContextMenuView.root}" var="doc" selectionMode="single" selection="#{treeContextMenuView.selectedNode}" orientation="horizontal" 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:contextMenu>
</h:form>