Primefaces - 有条件地自定义 p:confirmDialog 内容
Primefaces - Customize p:confirmDialog content conditionally
我有一个对象列表(我们称每个对象为 record 对象),通过 <p:datatable>
组件显示。每条记录都有一个删除按钮列。
当用户点击记录的删除按钮时,会显示<p:confirmDialog>
,要求用户确认。我想要的是在相应的情况下自定义confirmDialog的内容(例如show/do不显示关于记录的属性值的复选框, f.e if record.isPersonal, show the checkbox, else not
.
不幸的是,这似乎不起作用因为复选框总是显示以防第一条记录满足条件,反之则不。经过一些研究,我发现特别是在以前的 Primefaces 版本 中,他们曾经使用“JS 方式”(创建两个单独的确认对话框并按比例使用 PF('widgeName').show()
,但我会想知道 Primefaces 7.0 版本中是否存在开箱即用的解决方案,我通过 标签或其他方式使用。下面的代码示例:
<p:dataTable id="recordsTable" lazy="true" value="#{myBean.myList.records}" var="record...">
<p:column styleClass="deleteColumn">
<p:commandButton ...>
<p:confirm .../>
</p:commandButton>
<p:confirmDialog widgetVar="delete_record_dialog" global="true" showEffect="fade" hideEffect="fade">
<p:selectBooleanCheckbox
rendered="#{record.isPersonal}"
....>
</p:selectBooleanCheckbox>
<p:commandButton value="#{msg.yes}" type="button"
styleClass="ui-confirmdialog-yes" icon="pi pi-check"
/>
<p:commandButton value="#{msg.no}" type="button" styleClass="ui-confirmdialog-no"
icon="pi pi-times"
/>
</p:confirmDialog>
</p:column>
</p:dataTable>
提前致谢!
您可以使用 <p:confirmDialog message=""/>
有条件地显示不同的消息,如下所示:
<p:confirmDialog widgetVar="delete_record_dialog"
header="Record delete"
message="Are you sure you want to delete #{record.isPersonal ? 'your personal' : 'this'} record?">
<h:form id="recordDeleteForm">
<p:commandButton value="#{msg.yes}" update=":tableForm"
oncomplete="PF('deleteDialog').hide(); PF('recordsTableWidgetVar').filter()"/>
<p:commandButton value="#{msg.no}" type="button"
onclick="PF('delete_record_dialog').hide()"/>
</h:form>
</p:confirmDialog>
如果您想放入更多内容,则可以使用 <f:facet name="message">...</f:facet/>
另请参阅:
我认为与其使用 ConfirmDialog,不如使用 p:dialog
或使用 对话框框架 来构建您自己的自定义对话框。使用对话框框架,您可以创建一个简单的确认对话框,并以编程方式将数据传递到对话框中 - 例如基于当前行的标志,指示是否应显示复选框。对话框框架还提供了一种使用 dialogReturn
ajax 事件 return 将数据从对话框返回到调用页面的简单方法。
我有一个对象列表(我们称每个对象为 record 对象),通过 <p:datatable>
组件显示。每条记录都有一个删除按钮列。
当用户点击记录的删除按钮时,会显示<p:confirmDialog>
,要求用户确认。我想要的是在相应的情况下自定义confirmDialog的内容(例如show/do不显示关于记录的属性值的复选框, f.e if record.isPersonal, show the checkbox, else not
.
不幸的是,这似乎不起作用因为复选框总是显示以防第一条记录满足条件,反之则不。经过一些研究,我发现特别是在以前的 Primefaces 版本 中,他们曾经使用“JS 方式”(创建两个单独的确认对话框并按比例使用 PF('widgeName').show()
,但我会想知道 Primefaces 7.0 版本中是否存在开箱即用的解决方案,我通过
<p:dataTable id="recordsTable" lazy="true" value="#{myBean.myList.records}" var="record...">
<p:column styleClass="deleteColumn">
<p:commandButton ...>
<p:confirm .../>
</p:commandButton>
<p:confirmDialog widgetVar="delete_record_dialog" global="true" showEffect="fade" hideEffect="fade">
<p:selectBooleanCheckbox
rendered="#{record.isPersonal}"
....>
</p:selectBooleanCheckbox>
<p:commandButton value="#{msg.yes}" type="button"
styleClass="ui-confirmdialog-yes" icon="pi pi-check"
/>
<p:commandButton value="#{msg.no}" type="button" styleClass="ui-confirmdialog-no"
icon="pi pi-times"
/>
</p:confirmDialog>
</p:column>
</p:dataTable>
提前致谢!
您可以使用 <p:confirmDialog message=""/>
有条件地显示不同的消息,如下所示:
<p:confirmDialog widgetVar="delete_record_dialog"
header="Record delete"
message="Are you sure you want to delete #{record.isPersonal ? 'your personal' : 'this'} record?">
<h:form id="recordDeleteForm">
<p:commandButton value="#{msg.yes}" update=":tableForm"
oncomplete="PF('deleteDialog').hide(); PF('recordsTableWidgetVar').filter()"/>
<p:commandButton value="#{msg.no}" type="button"
onclick="PF('delete_record_dialog').hide()"/>
</h:form>
</p:confirmDialog>
如果您想放入更多内容,则可以使用 <f:facet name="message">...</f:facet/>
另请参阅:
我认为与其使用 ConfirmDialog,不如使用 p:dialog
或使用 对话框框架 来构建您自己的自定义对话框。使用对话框框架,您可以创建一个简单的确认对话框,并以编程方式将数据传递到对话框中 - 例如基于当前行的标志,指示是否应显示复选框。对话框框架还提供了一种使用 dialogReturn
ajax 事件 return 将数据从对话框返回到调用页面的简单方法。