有没有办法(或正确的方法)有条件地根据支持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;
}
我只想在conditionFlag
为true
的情况下显示对话框。在p:menuitem
运行后,如何在performCheck
上执行此类操作?
oncomplete="if (#{backingBean.conditionFlag}) { PF('dialogTest').show() }"
答案 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。