2014-07-01 35 views
1

請幫助我!!!
在我的網頁我有兩個部分:
PrimeFaces 4:管理同一棵樹節點上的select節點和contextMenu

  • 的一部分「菜單」裏我用的TreeNode作爲首選。
  • 第二部分「中央」,我在每次選擇一個節點時顯示一個頁面。

只是說,一切運行順利。
當我將treeNode與contextMenu關聯時,問題就開始了。每次我右鍵點擊一個節點來查看我的contextMenu,它會顯示我的中心頁面的加載時間。看起來像右鍵單擊並選擇一個新的混淆,誰接管是節點的選擇。
是否可以將這兩個事件分開?
是否有可能做其他事情,或有解決方法?
我發現的解決方法是在每個節點下放置一個commandLink。它沒有工作,特別是對於兒子節點。
THX的幫助

<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> 
+0

你能告訴我們「中央」部分的contextMenu嗎? – rion18

+0

@ rion18,我在中央頁面上沒有任何contextMenu。我想我很少解釋這個問題: 中央頁面只顯示選定節點的內容(在頁面菜單中選擇的節點)。 –

+0

好吧,我明白了。當你右鍵點擊一個節點來調用contextMenu時,這個節點被選中,這是默認的PrimeFaces行爲。但是,在PF 5.0(來自PF 4.0.2)中,'SelectTreeNodeEvent'已升級幷包含'isContextMenu()'方法。你可以看到[這裏](https://code.google.com/p/primefaces/issues/detail?id=6243)。 切換到PF 5.0選項? – rion18

回答

1

切換到PF 5.0將允許您使用isContextMenu方法。唯一不同的是,這將需要在您的onNodeSelect方法下面。

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

這樣,如果沒有調用contextMenu,您的原始選擇代碼將被執行。

+0

它運作良好。感謝您的幫助@ rion18。 –

+0

不錯。不知道這裏有這種方法。 :D謝謝! – Fritz