gpt4 book ai didi

jsf - 树的每个节点上的不同上下文菜单

转载 作者:行者123 更新时间:2023-12-05 08:59:41 25 4
gpt4 key购买 nike

在我的 JSF 项目中,我想根据某些条件(准确地说是某些权限)在树的每个节点上显示不同的上下文菜单

根据我的 xhtml,我已将上下文菜单与树绑定(bind),因此我在树的每个节点上都获得了相同的菜单。这是代码:

<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 个选项.

我该怎么做?

提前致谢。

最佳答案

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

关于jsf - 树的每个节点上的不同上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11288715/

25 4 0