【发布时间】:2021-08-08 00:37:06
【问题描述】:
我有一个对象列表(我们称每个对象为 record 对象),通过<p:datatable> 组件显示。每条记录都有一个删除按钮列。
当用户点击记录的删除按钮时,会显示<p:confirmDialog>,要求用户确认。我想要的是在相应情况下自定义confirmDialog的内容(例如显示/不显示有关记录属性值的复选框,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>
提前致谢!
【问题讨论】:
-
你不想
global="false"这样它就不会为应用程序存储 1 个确认对话框的副本。您需要以某种方式将您的确认对话框设置为update=,以便在调用时重新评估其内容。不确定我是否通过确认对话框看到了这一点。 -
@Melloware 谢谢你的回复,确实我把global=“true”改成global=“false”了,你有什么建议让我相应地更新confirmDialog的内容吗?跨度>
-
我不确定它是否可能。我从来没有使用过 ConfirmDialog 你是如何使用它的。
-
好吧,我什至尝试创建两个单独的
outputPanels,其中分别包含commandButton和confirmDialog,并根据此条件渲染它们,但在任何情况下仍然只触发第一个confirmDialog,这已经让我发疯了
标签: jsf primefaces primefaces-datatable