如何解决在删除p:dataTable条目之前显示确认对话框
我目前正在实现一个带有删除功能的数据表。在删除之前,用户在对话框中确认他的决定:如果是,则应删除“当前”行(即用户单击删除按钮的行)。当前,最后一行被删除,而无论在哪个行上触发了删除操作,都是不可思议的:
<p:dataTable var="var" value="#{bean.list}">
//some columns
//relevant column
<p:column id="id">
<p:commandButton id="deleteButton" onclick="PF('deleteDialog').show();" />
<p:confirmDialog id="deleteDialogId" widgetVar="deleteDialog" appendTo="@form">
<p:commandButton id="confirm" onclick="PF('deleteDialog').hide();"
actionListener="#{bean.deleteRowAction(var)}" />
<p:commandButton id="cancel" onclick="PF('deleteDialog').hide();" />
</p:confirmDialog>
</p:column>
</p:dataTable>
似乎confirm
按钮的actionListener无法通过仅获取var
作为输入来访问当前行。如果我摆脱了对话框,而是在deleteButton
上触发了动作监听器,那么一切都会按预期进行:
// works,but no dialog
<p:dataTable var="var" value="#{bean.list}">
//some columns
//relevant column
<p:column id="id">
<p:commandButton id="deleteButton" actionListener="#{bean.deleteRowAction(var)}" />
</p:column>
</p:dataTable>
我找到了How can I pass selected row to commandLink inside dataTable or ui:repeat?和JSF Delete entity on DataTable with p:dialog,但是很遗憾,它没有帮助。
是否可以通过某种方式将“当前”表项传递到外部按钮上?
解决方法
通过使用p:confirmDialog
,有一种更简便的方法。这样一来,您只需将p:confirm
添加到p:commandButton
中就可以完成了:
<h:form>
<p:dataTable var="var" value="#{bean.list}">
<p:column id="id">
<p:commandButton id="deleteButton"
action="#{bean.deleteRowAction(var)}">
<p:confirm header="Confirmation"
message="Are you sure?"
icon="pi pi-exclamation-triangle" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:confirmDialog global="true">
<p:commandButton value="Yes" type="button"
styleClass="ui-confirmdialog-yes" icon="pi pi-check" />
<p:commandButton value="No" type="button"
styleClass="ui-confirmdialog-no" icon="pi pi-times" />
</p:confirmDialog>
</h:form>
,
我只在列内使用确认:
<p:dataTable var="item" ...
<p:column headerText="Item">
<p:commandButton action="#{myBean.deleteItem(item)}">
<p:confirm header="Confirmation" message="Delete item?" icon="ui-icon-alert"/>
</p:commandButton>
</p:column>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。