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 Primefaces-有条件地自定义p:confirmDialog内容_Jsf_Primefaces_Primefaces Datatable - Fatal编程技术网

Jsf Primefaces-有条件地自定义p:confirmDialog内容

Jsf Primefaces-有条件地自定义p:confirmDialog内容,jsf,primefaces,primefaces-datatable,Jsf,Primefaces,Primefaces Datatable,我有一个对象列表(让我们把每个对象称为记录对象),通过组件显示。每条记录都有一个删除按钮列 当用户单击记录的删除按钮时,会显示,要求用户确认。我想要的是在相应的情况下自定义confirmDialog的内容(例如,显示/不显示有关记录属性值的复选框,f.eif record.isPersonal,则显示复选框,否则不显示) 不幸的是,这似乎不起作用,因为如果第一条记录满足条件,复选框总是显示,如果不满足条件,复选框就会显示。经过一些研究,我发现,特别是在以前的Primefaces版本中,他们使用的

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

当用户单击记录的删除按钮时,会显示
,要求用户确认。我想要的是在相应的情况下自定义confirmDialog的内容(例如,显示/不显示有关记录属性值的复选框,f.e
if record.isPersonal,则显示复选框,否则不显示

不幸的是,这似乎不起作用,因为如果第一条记录满足条件,复选框总是显示,如果不满足条件,复选框就会显示。经过一些研究,我发现,特别是在以前的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 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>

如果您想加入更多内容,可以使用

另请参见:


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

是否希望
global=“false”
这样它就不会存储应用程序的确认对话框的一个副本。您需要将确认对话框设置为
update=
,以便在调用时重新评估其内容。不确定我是否看到确认对话框完成了此操作。@Melloware感谢您的回复,事实上我已将其从global=“true”更改为global=“false”,您有什么建议让我相应地更新confirmDialog的内容吗?我不确定这是否可能。我从未使用过confirmDialog,您是如何使用它的。我甚至尝试用
commandButton
confirmDialog
分别创建两个独立的
OutputPanel
,并根据根据这种情况,但在任何情况下,仍然只有第一个
confirmDialog
被触发,这已经开始让我发疯了。谢谢你的回复,不幸的是,这个答案似乎并没有回答我的问题,我不想在这种情况下有一条定制的消息,而是想在confirmDialog中定制关于ag触发了该调用,为了实现这一点,我在delete按钮上附加了一个ajax onclick事件,它“更新”confirmDialog的内容有效,但我不认为它是最佳解决方案感谢您的回复,您认为使用
p:dialog
组件的正确方式是什么,以便每次单击datatable中的delete按钮时,记录对象都会传递到
p:dialog
?我想我可以更新组件通过附加到delete按钮的ajax onclick事件进行nt,但这将是一个与我在评论中提到的解决方案一样复杂的解决方案,请发布您的建议的代码示例。要使用
p:dialog
并查看将数据传递到对话框的示例,请参见。注意(与示例中不同)对话框应该在主窗体之外,并且应该包含它自己的窗体。这似乎非常适合我的情况,我将尝试实现它并让您知道,谢谢:)我实现了这个解决方案,对我来说效果很好,但是,我在与datatable相同的表单中添加了对话框,效果很好,为什么您会建议对话框应该在主表单之外?通常,表单应该表示一个逻辑工作单元。请参阅BalusC的回答。但是我也发现了这一点,特别是在对话框它本身有Ajax操作,所以一个表单是可以的,但我认为并不总是最优的,但是使用Ajax(就像PF默认使用的那样)有助于限制使用一个大表单的影响。