这是我的场景,我有一个填充了客户端的dataTable,其中有一个列,其中包含一个用于删除行的按钮。当我点击按钮时会显示confirmDialog,这个confirmDialog的“message”属性绑定到辅助bean上的客户端名称。
我尝试过两种方法来更新confirmDialog并使用所选行的名称:
当我选择行更新confirmDialog时,问题在于有时更新时间比点击删除按钮所花费的时间更长,这意味着更新只发生在confirmDialog已经打开,并且如果你更新一个打开的对话框,那么关键字会出现错误。
点击删除按钮后更新confirmDialog,如果我在点击按钮之前选择了行,它会起作用,但是如果我直接点击按钮而不选择行,它会更新改为上一个选定的行。
任何人都可以考虑另一种策略来实现这一目标吗?
我认为有一件事是只在选择行时显示删除按钮,这样第二种方法就可以了。但我不知道该怎么做。
答案 0 :(得分:1)
我大部分时间这样做的方法是分2步进行编辑或删除。当有人点击删除按钮时,您确切知道来自哪一行并保存该信息。在对话框中,您只需调用delete方法并删除之前保存的对象。
让我举几个汽车的例子。首先,在表中调用一个方法将当前选定的Object保存到“currentCar”中,然后打开对话框。
<p:commandButton icon="ui-icon ui-icon-close"
action="#{carBean.prepareRemoveCar(var)}"
oncomplete="dlg_confirmDeleteCar.show();" />
在对话框中,您只需调用方法public void deleteCar()
并删除“currentCar”
public class CarBean implements Serializable {
...
private Car currentCar;
...
public void prepareDeleteCar(Car currentSelectedCar){
currentCar = currentSelectedCar;
}
public void deleteCar(){
//delete currentCar
}
...
}
如果您遵循此方法,则表中当前选定的行与删除无关。您可以单击任何删除按钮,并始终删除该行/对象,无论选择如何。
当然,您也可以将此用于其他情况,例如:更新您的实例,或创建新实例(在这种情况下,您可以使用“prepareMethod”来设置currentCar=new Car();
)