在primefaces上更新confirmDialog

在primefaces上更新confirmDialog,primefaces,Primefaces,这是我的场景,我有一个填充了客户机的dataTable,它有一列,其中有一个用于删除行的按钮。当我点击按钮时,它会显示confirmDialog,这个confirmDialog有一个“message”属性绑定到支持bean上的客户机名称 我尝试了两种方法用所选行的名称更新confirmDialog: 当我选择更新confirmDialog的行时,问题是有时更新的时间比单击delete按钮所需的时间要长,这意味着更新只在confirmDialog已经打开并且primefaces上有一个bug时发生

这是我的场景,我有一个填充了客户机的dataTable,它有一列,其中有一个用于删除行的按钮。当我点击按钮时,它会显示confirmDialog,这个confirmDialog有一个“message”属性绑定到支持bean上的客户机名称

我尝试了两种方法用所选行的名称更新confirmDialog:

  • 当我选择更新confirmDialog的行时,问题是有时更新的时间比单击delete按钮所需的时间要长,这意味着更新只在confirmDialog已经打开并且primefaces上有一个bug时发生,如果更新打开的对话框,它将关闭

  • 在单击“删除”按钮后更新confirmDialog,如果在单击按钮之前选择了行,则该对话框会起作用,但如果直接单击按钮,而不选择行,则该对话框会更新为以前选择的行

  • 任何人都可以想出另一种策略来实现这一点


    我认为只有在选中行时才显示delete按钮,这样第二种方法才能工作。但我不知道怎么做

    大多数情况下,我这样做的方式是分两步进行编辑或删除。当有人单击“删除”按钮时,您确切地知道该行来自哪个行,并保存该信息。在对话框中,您只需调用delete方法并删除之前保存的对象

    让我给你举一个关于汽车的简短例子。首先,在表中调用一个方法将当前选定的对象保存到“currentCar”中,当然还可以打开对话框

    <p:commandButton icon="ui-icon ui-icon-close"
       action="#{carBean.prepareRemoveCar(var)}"
       oncomplete="dlg_confirmDeleteCar.show();" />
    
    如果采用这种方法,则表中当前选定的行对于删除并不重要。您可以单击任何“删除”按钮,并将始终删除该行/对象,而不考虑选择

    当然,您也可以将其用于其他情况,例如更新实例或创建新实例(在这种情况下,您可以使用“prepareMethod”设置
    currentCar=new Car();

    public class CarBean implements Serializable {
        ...
        private Car currentCar;
        ...
        public void prepareDeleteCar(Car currentSelectedCar){
            currentCar = currentSelectedCar;
        }
    
        public void deleteCar(){
            //delete currentCar
        }
        ...
    }