如何根据支持bean条件有条件地显示p:dialog

时间:2014-08-14 14:23:35

标签: jsf primefaces modal-dialog

有没有办法(或正确的方法)有条件地根据支持bean条件在primefaces上显示对话框? 代码如下所示:

<!-- dialog declaration -->
<p:dialog id="dialogTest" widgetVar="dialogTest" header="#{text['modal.header']}" modal="true" >
                <h:outputText value="Test output" />
            </p:dialog>
<!-- caller -->
<p:menuitem value="Check" actionListener="#{backingBean.performCheck}" oncomplete="PF('dialogTest').show()" icon="ui-icon-arrowthick-1-e"/>                            

我的支持bean如下所示:

private boolean conditionFlag; // ... +getter

public void performCheck() {
    // ... access managers (database)
    this.conditionFlag = dao.check();// some check;
}

我只想在conditionFlagtrue的情况下显示对话框。在p:menuitem运行后,如何在performCheck上执行此类操作?

oncomplete="if (#{backingBean.conditionFlag}) { PF('dialogTest').show() }"
  • JSF 2.0
  • Primefaces 5
  • Java 1.7

3 个答案:

答案 0 :(得分:5)

我按照以下方式工作

<!-- dialog declaration -->
<h:form id="dialogForm">
   <p:dialog id="dialogTest" 
             widgetVar="dialogTest" 
             header="#{text['modal.header']}" 
             modal="true">
               <h:outputText value="Test output" />
   </p:dialog>
</h:form>
<!-- caller -->
<p:menuitem value="Check" 
            actionListener="#{backingBean.performCheck}" 
            oncomplete="if (#{backingBean.conditionFlag}) { PF('dialogTest').show() }"
            icon="ui-icon-arrowthick-1-e" 
            update="@this, :dialogForm, :dialogForm:dialogTest"/> 

支持bean保持不变(如问题所示)。

主要区别在于oncomplete属性和ajax update属性()

答案 1 :(得分:4)

只需将update="@this"添加到p:menuitem即可。那么你的oncomplete块将按预期工作。

答案 2 :(得分:2)

将布尔变量绑定到对话框的visible属性。

<p:dialog id="dialogTest" visible="#{backingBean.conditionFlag}" widgetVar="dialogTest" header="#{text['modal.header']}" modal="true" >
    <h:outputText value="Test output" />
</p:dialog>

然后让菜单项正常执行:

<p:menuitem value="Check" actionListener="#{backingBean.performCheck}" oncomplete="PF('dialogTest').show()" icon="ui-icon-arrowthick-1-e" update="dialogTest"/>

无需额外的工作。为获得最佳效果,请使用@ViewScoped bean。