2015-10-15 47 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>