演出前处理 primefaces 菜单

Process primefaces menu before show

我有一个 primefaces 菜单,其中的项目在支持 bean 的条件下被禁用。 问题是,条件是在更新后处理的。

如果我 select 一个启用了所有项目的节点并切换到一个禁用所有项目的节点, 菜单已重新加载,但会在项目被禁用前显示所有已启用的内容一秒钟。

有没有办法在显示菜单之前处理禁用条件?

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

已编辑

隐藏 ajax 调用开始时的菜单项,并在调用完成时显示它们。页面中的源代码为:

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