我想打开一个基于bean布尔值的全局p:confirmDialog
。我想要这样的东西:
<p:commandButton value="Save" actionListener="#{bean.save}"
update="@form" oncomplete="jsfunction();">
<p:confirm header="Confirm" message="Are you sure?" rendered="#{bean.boolean}"/>
</p:commandButton>
但渲染在那里不起作用(我希望如此)。
此外,我不想复制p:commandButton
并使用其渲染属性来实现这一点。
有没有办法在不改变太多事情的情况下完成这项工作?我必须按很多按钮来做。
我知道这个问题有点老了,但我最近在条件/动态确认方面遇到了同样的问题,上面的解决方案都不适合我。
经过一些测试,我使用禁用的属性(在PrimeFaces6.0中引入)构建了我的按钮,如下所示:
<p:confirmDialog global="true">
<p:commandButton value="Yes" type="button" />
<p:commandButton value="No" type="button" />
</p:confirmDialog>
<p:commandButton actionListener="#{myBean.myMethod} value="Submit">
<p:confirm header="Confirmation" message="Are you sure?" disabled="#{myBean.boolean}"/>
</p:commandButton>
这有点麻烦,但您可以在commandButton和p:confirm标记之间使用JSTL"c:if"标记。因为JSTL标记是在Facelet页面的执行流的早期解释的,所以p:confirm标记不会抱怨它的父级不是有效的commandButton。例如:
<p:commandButton action="#{myBean.myMethod} value="Submit">
<c:if test="#{myBeanBean.warningEnabled}">
<p:confirm header="Confirmation" message="#{myBean.warningMessage}" icon="ui-icon-alert"/>
</c:if>
</p:commandButton>
要尝试的一件事是使用布尔值来呈现<p:confirmDialog>
<p:commandButton value="Save" actionListener="#{bean.save()}"
update="@form" oncomplete="jsfunction();">
<p:confirm header="Confirm" message="Are you sure?" />
</p:commandButton>
<p:confirmDialog global="true" rendered="#{bean.boolean}">
<p:commandButton value="Yes" type="button" />
<p:commandButton value="No" type="button" />
</p:confirmDialog>
如果这对你不起作用,我认为唯一的其他方法就是你试图避免的两个<p:commandButton>
选项。
必须使用visible而不是rendered。代码是这样的:
<p:commandButton value="Save" actionListener="#{bean.save()}"
update="@form" onstart="dlgWgt.show();" oncomplete="jsfunction();">
<p:confirm header="Confirm" message="Are you sure?" />
</p:commandButton>
<p:confirmDialog global="true" visible="false" widgetVar="dlgWgt">
<p:commandButton value="Yes" type="button" />
<p:commandButton value="No" type="button" />
</p:confirmDialog>
如果您需要在完成时显示对话框,请在适当的事件中设置dlgWgt.show()。