2015-10-15 55 views
0

我有一個primefaces菜單,其中的項目在來自backing bean的條件中被禁用。 問題是,更新後處理條件。顯示之前的處理primefaces菜單

如果我選擇了一個節點,每個節點都啓用並切換到禁用所有節點的節點, 菜單將被重新加載,但在禁用項目之前顯示所有啓用了一秒的所有內容。

有沒有辦法在顯示菜單之前處理禁用條件?

<h:form id="form"> 
    <p:tree id="tree" ...> 
     <p:ajax event="select" update=":form:tree:menu" listener...> 
     <p:treeNode id="treenode"> 
      <p:commandButton id="btn" type="button" /> 
      <p:overlayPanel for="btn"> 
       <p:menu id=menu"> 
        <p:menuitem .... disabled="#{bean.condition1}" /> 
        <p:menuitem .... disabled="#{bean.condition2}" /> 
        ... 
       </p:menu> 
     </p:overlayPanel> 
    </p:treenode> 
</p:tree> 

+0

的'類型=「按鈕」'使得它死客戶端的按鈕,而不是提交按鈕,這與AJAX魔術和所有服務器進行交互。也許你沒有意識到這一點? – BalusC

+0

@BalusC你是對的,我從按鈕中刪除了ajax的東西。在Primefaces Showcase之後,type =按鈕對於overlayPanel魔術來說是必需的。據我所知,更新是由select事件觸發的,而不是按鈕。順便說一句:使用類型=提交按鈕沒有解決問題。 – sinclair

回答

1

EDITED

隱藏的菜單項,在Ajax調用的beggining,並告訴他們完成時。在頁面的源代碼是:

<p:tree id="tree" value="#{bean.root}" var="node" selectionMode="checkbox"> 
    <p:treeNode id="treenode"> 
     <p:commandButton id="btn" value="#{node}" 
       onstart="$('.ui-overlaypanel-content').css('display','none');" 
       oncomplete="$('.ui-overlaypanel-content').css('display','block');" 
       actionListener="#{bean.processAndUpdateConditions}" update="mymenu"/> 
     <p:overlayPanel for="btn"> 
      <p:menu id="mymenu" > 
       <p:menuitem value="Condition 1" disabled="#{bean.condition1}" /> 
       <p:menuitem value="Condition 2" disabled="#{bean.condition2}" /> 
      </p:menu> 
     </p:overlayPanel> 
    </p:treeNode> 
</p:tree>