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谢谢!