Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何基于支持bean条件有条件地显示p:dialog_Jsf_Primefaces_Modal Dialog - Fatal编程技术网

Jsf 如何基于支持bean条件有条件地显示p:dialog

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

是否有任何方法(或正确的方法)根据支持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"/>                            
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
属性和ajax
update
属性()

如果可以工作的话非常好,但是它不需要重新加载整个页面吗@JaqenH'ghar-不,不会,但是很好的捕获-我忘了添加ajax更新对话框的部分我得到了渲染属性和可见属性之间的差异-我觉得完全不渲染更正确,因为在我的例子中,对话框每次显示时都会显示不同的(服务器端生成的)数据,因此,我选择了alternative@kolossus我得到它的工作-我注意到Ajax更新丢失,这就是它,将提供我自己的答案-我可以认为这是正确的答案(因为更新丢失,我注意到它当你读你的评论),但答案的基本原理不会满足什么是不奏效的。所以我只想+1它缺少更新,但不是在
@这个
,我提供了我自己的答案来完成你的任务。是用这个更新命令重新呈现的菜单项吗?如果没有,请原谅我,但我就是不知道它是如何工作的。:)菜单项未更新-菜单项独立于
dialogForm
。然而,我认为如果表单包含menuitem(注意id和namingcontainers),那么
if(#{backingBean.conditionFlag})又如何呢
在ajax请求完成时更新部分?我认为诀窍在于
oncomplete
属性:如果使用
onclick
,则不能保证
if({backingBean.conditionFlag})
actionListener
执行之后执行
我认为菜单项确实必须更新。因为是的,oncomplete在动作侦听器之后工作,但这还不够。如果不更新menuitem,则初始页面加载后if子句将保持不变。