PrimeFaces 4:管理同一树节点上的选择节点和上下文菜单
请帮帮我PrimeFaces 4:管理同一树节点上的选择节点和上下文菜单,primefaces,contextmenu,jsf-2.2,Primefaces,Contextmenu,Jsf 2.2,请帮帮我 在我的页面上,我有两个部分: 我使用treeNode作为选项的“菜单”部分 第二部分“中心”,每次选择节点时,我都会在其中显示一个页面。 只是一切都很顺利 当我将treeNode与contextMenu关联时,问题就开始了。每次我右键单击某个节点以查看我的上下文菜单时,它都会显示我的中心页的加载时间。看起来右键单击并选择一个新节点是混乱的,谁接管了节点的选择。是否可以将这两个事件分开是否可以采用其他方法,或者是否有解决方法 我发现的解决方法是在每个节点下放置一个commandLin
在我的页面上,我有两个部分:
- 我使用treeNode作为选项的“菜单”部分
- 第二部分“中心”,每次选择节点时,我都会在其中显示一个页面。
当我将treeNode与contextMenu关联时,问题就开始了。每次我右键单击某个节点以查看我的上下文菜单时,它都会显示我的中心页的加载时间。看起来右键单击并选择一个新节点是混乱的,谁接管了节点的选择。
是否可以将这两个事件分开
是否可以采用其他方法,或者是否有解决方法
我发现的解决方法是在每个节点下放置一个commandLink。它不起作用,尤其是对于子节点。
谢谢您的帮助
<h:form id="formMenuAdmin" >
<p:panel header="Domaines" id="panelDomaines" style="border: none;width: auto" >
<p:contextMenu for="treeMenuAdmin" id="contextMenuTreeNodeDomaine" nodeType="Domaine">
<p:menuitem id="menuitemAdd" value="Créer " icon="ui-icon-search" actionListener="#{domaineCtrl.afficherDialogOrg('dialogCreateDgdsVar')}">
</p:menuitem>
<p:menuitem id="menuitemEdit" value="Editer" icon="ui-icon-search">
</p:menuitem>
<p:menuitem id="menuitemUpdate" value="Modifier" icon="ui-icon-search">
</p:menuitem>
<p:menuitem id="menuitemDelete" value="Supprimer" icon="ui-icon-search">
</p:menuitem>
</p:contextMenu>
<p:contextMenu for="treeMenuAdmin" id="contextMenuTreeNodeSousDomaine" nodeType="Dss">
<p:menuitem id="menuitemAddDss" value="Créer"
icon="ui-icon-search"
actionListener="#{domaineCtrl.afficherDialogOrg('dialogCreateDss')}">
</p:menuitem>
<p:menuitem id="menuitemEditDss" value="Editer"
icon="ui-icon-search" actionListener="#">
</p:menuitem>
<p:menuitem id="menuitemUpdateDss" value="Modifier "
icon="ui-icon-search" actionListener="#">
</p:menuitem>
<p:menuitem id="menuitemDeleteDss" value="Supprimer"
icon="ui-icon-search" actionListener="#">
</p:menuitem>
</p:contextMenu>
<p:tree id="treeMenuAdmin" value="#{treeNodeCtrl.rootTreeNode}"
var="doc" selectionMode="single"
selection="#{treeNodeCtrl.selectedTreeNode}"
style="width: auto;border: none" cache="true" >
<p:ajax event="select" listener="#{treeNodeCtrl.onNodeSelect()}" />
<p:treeNode id="treeNodeDomaine" type="Domaine"
expandedIcon="ui-icon-folder-open"
collapsedIcon="ui-icon-folder-collapsed">
<h:outputText value="#{doc.nom}" id="outputTextDomaine#{doc}"/>
</p:treeNode>
<p:treeNode id="treeNodeDss" type="Dss" >
<h:outputText value="#{doc.nom}" id="outputTextDss" />
</p:treeNode>
</p:tree>
</p:panel>
</h:form>
切换到PF 5.0将允许您使用
isContextMenu
方法。这将带来的唯一区别是,在onNodeSelect
方法上
public void onNodeSelect(NodeSelectEvent event){
if (!event.isContextMenu()){
//original code here.
}
}
这样,如果未调用contextMenu,您的原始选择代码将被执行。您能为我们显示“中心”部分的contextMenu吗?@rion18,我在中心页面上没有任何contextMenu。我想我没有很好地解释这个问题:中央页面只显示所选节点的内容(页面菜单上选择的节点)。好的,我明白了。右键单击某个节点以调用上下文菜单时,将选中此节点,这是默认的PrimeFaces行为。但是,在PF 5.0(来自PF 4.0.2)上,升级了
SelectTreeNodeEvent
,并包含了isContextMenu()
方法。你可以看到。切换到PF 5.0是一种选择吗?是的,我可以。那么,解决方案就是简单地切换到PF5.0?如果我理解你的话,我的代码没有任何改变。很好。我不知道这里有这种方法D谢谢!