2012-07-02 3 views
2

В моем JSF проекте я хочу показать другое контекстное меню на каждом узле дерева, основываясь на некоторых условиях (точнее некоторые разрешения)Различное Контекстное меню на каждый узел дерева

Present по моему XHTML, у меня есть связанное контекстное меню с деревом, поэтому я получаю одинаковое меню на каждом узле дерева. Вот код:

<p:contextMenu for="TreeID"> 
    <p:menuitem value="Create" update=":centerPanel" actionListener="#{someBean.createPrivilege}" onstart="statusDialog.show();" 
     oncomplete="statusDialog.hide();" /> 
    <p:menuitem value="Edit" update=":commonDialog :centerPanel" actionListener="#{someBean.editPrivilege}" 
     onstart="statusDialog.show();" oncomplete="statusDialog.hide();" /> 
    <p:menuitem value="Delete" onstart="delPrivilegeConfirmDialog.show();" /> 
</p:contextMenu> 
<p:scrollPanel mode="native" styleClass="scroll-panel"> 
    <p:tree id="TreeID" value="root" var="node" selectionMode="single" 
     selection="#{someBean.selectedNode}" dynamic="true"> 
     <p:ajax listener="#{someBean.onNodeSelect}" update=":centerPanel" event="select" onstart="statusDialog.show();" 
      oncomplete="statusDialog.hide();" /> 
     <p:treeNode id="someID"> 
      <h:outputText value="#{node}" id="lblNode" /> 
     </p:treeNode> 
    </p:tree> 
</p:scrollPanel> 

Но по моему требованию, я хочу на каждом узле другое контекстное меню, в основном у меня есть 3 варианта в моем контекстном меню, как Создание, редактирование, удаление .. то мне нужно, чтобы скрыть 1 или 2 на каждом узле на основе определенных условий.

Как бы я это сделал?

Заранее спасибо.

ответ

7

Предполагая, что вы используете PrimeFaces, последние версии предоставляют возможность установить различные контекстные меню для различных типов узлов, используя «NODETYPE» атрибут:

<p:contextMenu for="TreeID" nodeType="type1"> 
    <p:menuitem value="Create" update=":centerPanel" actionListener="#{someBean.createPrivilege}" onstart="statusDialog.show();" 
     oncomplete="statusDialog.hide();" /> 
    <p:menuitem value="Edit" update=":commonDialog :centerPanel" actionListener="#{someBean.editPrivilege}" 
     onstart="statusDialog.show();" oncomplete="statusDialog.hide();" /> 
    <p:menuitem value="Delete" onstart="delPrivilegeConfirmDialog.show();" /> 
</p:contextMenu> 
<p:contextMenu for="TreeID" nodeType="type2"> 
    <!-- Other menu items --> 
</p:contextMenu> 
<p:scrollPanel mode="native" styleClass="scroll-panel"> 
    <p:tree id="TreeID" value="root" var="node" selectionMode="single" 
     selection="#{someBean.selectedNode}" dynamic="true"> 
     <p:ajax listener="#{someBean.onNodeSelect}" update=":centerPanel" event="select" onstart="statusDialog.show();" 
      oncomplete="statusDialog.hide();" /> 
     <p:treeNode id="someID" type="type1"> 
      <h:outputText value="#{node}" id="lblNode" /> 
     </p:treeNode> 
     <p:treeNode id="someID" type="type2"> 
      <h:outputText value="#{node}" id="lblNode" /> 
     </p:treeNode> 
    </p:tree> 
</p:scrollPanel> 

Просто имейте в виду, что вам необходимо установить узел тип для всех узлов, генерируемых моделью:

TreeNode x = new DefaultTreeNode("type1", data, parent); 
Смежные вопросы