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

另请参阅:

<p:confirmDialog> with a parameter message

我认为与其使用 ConfirmDialog,不如使用 p:dialog 或使用 对话框框架 来构建您自己的自定义对话框。使用对话框框架,您可以创建一个简单的确认对话框,并以编程方式将数据传递到对话框中 - 例如基于当前行的标志,指示是否应显示复选框。对话框框架还提供了一种使用 dialogReturn ajax 事件 return 将数据从对话框返回到调用页面的简单方法。