【问题标题】:Different Context menu on each node of tree树的每个节点上的不同上下文菜单
【发布时间】:2012-07-02 06:30:59
【问题描述】:

在我的 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>

但根据我的要求,我希望每个节点上都有不同的上下文菜单,基本上我的上下文菜单中有 3 个选项,例如 Create、Edit、Delete.. 然后我需要根据某些条件在每个节点上隐藏 1 或 2 个选项.

我该怎么做?

提前致谢。

【问题讨论】:

    标签: jsf primefaces treeview


    【解决方案1】:

    假设您使用的是 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多