2

私のJSFプロジェクトでは、いくつかの条件に基づいてツリーのすべてのノードに異なるコンテキストメニューを表示したい(正確にはいくつかの権限)

私の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>

しかし、私の要件によれば、すべてのノードで異なるコンテキスト メニューが必要です。基本的に、コンテキスト メニューには Create、Edit 、Delete などの 3 つのオプションがあり、特定の条件に基づいてすべてのノードで 1 つまたは 2 つのオプションを非表示にする必要があります。

どうすればいいですか?

前もって感謝します。

4

1 に答える 1

9

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);
于 2013-03-20T11:02:03.107 に答える