2

我有一个对象列表(让我们将每个对象称为记录对象),通过一个<p:datatable>组件显示。每条记录都有一个删除按钮列

当用户单击记录的删除按钮<p:confirmDialog>时,会显示 a,要求用户确认。我想要的是在相应的情况下自定义confirmDialog的内容(例如显示/不显示关于记录属性值的复选框, fe if record.isPersonal, show the checkbox, else not

不幸的是,这似乎不起作用,因为如果第一个记录满足条件,则始终显示复选框,如果不满足条件,则相反。经过一番研究,我发现尤其是在之前的Primefaces 版本中,他们曾经使用“JS 方式”(创建两个单独的确认对话框并按比例使用PF('widgeName').show(),但我想知道Primefaces 7.0 版本中是否存在任何开箱即用的解决方案我通过<p:confirm>标签或其他东西使用它。下面的代码示例:

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

提前致谢!

4

2 回答 2

2

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

于 2021-05-20T23:13:27.683 回答
0

您可以使用<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> 带有参数消息

于 2021-05-20T11:14:07.470 回答