Jsf 如何基于支持bean条件有条件地显示p:dialog
是否有任何方法(或正确的方法)根据支持bean条件有条件地显示primefaces上的对话框? 代码如下所示:Jsf 如何基于支持bean条件有条件地显示p:dialog,jsf,primefaces,modal-dialog,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" />
<!-- 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"/>
private boolean conditionFlag; // ... +getter
public void performCheck() {
// ... access managers (database)
this.conditionFlag = dao.check();// some check;
}
我只想在conditionFlag
为true
的情况下显示该对话框。运行performCheck
后,如何在p:menuitem
上执行类似操作
oncomplete="if (#{backingBean.conditionFlag}) { PF('dialogTest').show() }"
- JSF2.0
- 素数面5
- Java 1.7
update=“@this”
添加到p:menuitem
。然后您的oncomplete
块将按预期工作。只需将布尔变量绑定到对话框的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。我得到了如下结果
<!-- 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
属性和ajaxupdate
属性()如果可以工作的话非常好,但是它不需要重新加载整个页面吗@JaqenH'ghar-不,不会,但是很好的捕获-我忘了添加ajax更新对话框的部分我得到了渲染属性和可见属性之间的差异-我觉得完全不渲染更正确,因为在我的例子中,对话框每次显示时都会显示不同的(服务器端生成的)数据,因此,我选择了alternative@kolossus我得到它的工作-我注意到Ajax更新丢失,这就是它,将提供我自己的答案-我可以认为这是正确的答案(因为更新丢失,我注意到它当你读你的评论),但答案的基本原理不会满足什么是不奏效的。所以我只想+1它缺少更新,但不是在@这个
,我提供了我自己的答案来完成你的任务。是用这个更新命令重新呈现的菜单项吗?如果没有,请原谅我,但我就是不知道它是如何工作的。:)菜单项未更新-菜单项独立于dialogForm
。然而,我认为如果表单包含menuitem(注意id和namingcontainers),那么if(#{backingBean.conditionFlag})又如何呢
在ajax请求完成时更新部分?我认为诀窍在于oncomplete
属性:如果使用onclick
,则不能保证if({backingBean.conditionFlag})
在actionListener
执行之后执行我认为菜单项确实必须更新。因为是的,oncomplete在动作侦听器之后工作,但这还不够。如果不更新menuitem,则初始页面加载后if子句将保持不变。