在显示之前处理primefaces菜单

时间:2015-10-15 10:02:55

标签: jsf jsf-2 primefaces

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

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

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

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

1 个答案:

答案 0 :(得分:1)

<强> EDITED

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