PrimeFaces 4:在同一个treeNode上管理select节点和contextMenu

时间:2014-07-01 12:21:04

标签: primefaces contextmenu jsf-2.2

请帮助我!!! 在我的页面上,我有两个部分:

  • 部分"菜单"我使用treeNode作为选择。
  • 第二部分"中心"我每次选择节点时都会显示页面。

只是一切顺利。
当我将treeNode与contextMenu相关联时,问题就开始了。每次我右键单击一个节点来查看我的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>

1 个答案:

答案 0 :(得分:1)

切换到PF 5.0将允许您使用isContextMenu方法。这将带来的唯一区别在于您的onNodeSelect方法。

public void onNodeSelect(NodeSelectEvent event){
  if (!event.isContextMenu()){
    //original code here.
  }
}

这样,如果未调用contextMenu,将执行原始选择代码。