在删除p:dataTable条目之前显示确认对话框

时间:2020-08-24 10:09:07

标签: primefaces

我目前正在实现一个带有删除功能的数据表。在删除之前,用户在对话框中确认他的决定:如果是,则应删除“当前”行(即用户单击删除按钮的行)。当前,最后一行被删除,而无论在哪个行上触发了删除操作,都是不可思议的:

<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,但是很遗憾,它没有帮助。

是否可以通过某种方式将“当前”表项传递到外部按钮上?

2 个答案:

答案 0 :(得分:2)

通过使用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>

答案 1 :(得分:0)

我只在列内使用确认:

<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> 
相关问题