Vaadin 8.4.0 网格缓冲区保存后保存确认模式

Vaadin 8.4.0 Modal for save confirmation after grid buffer save

我们正在使用网格来呈现一些数据。此网格未使用数据提供程序,而是设置其项目。

我们正在处理缓冲 modd,但我们仍想显示一个模式,通知我们要保存什么,并可以保存或取消。

在我们当前的版本 (8.4.0) 中,SaveEditor 方法已从网格 class 中删除,因此不能那样做。

我已经找到了一个接近的解决方案,但还有一些遗留问题。 我扩展了网格组件以便能够创建我自己的编辑器:

public class MyGridComponent extends Grid<MyData> {

public MyGridComponent (Class<MyData> beanType) {
    super(beanType);
}

@Override
protected Editor<MyData> createEditor() {
    return new MyGridEditor(this.getPropertySet());
}

}

在我的编辑器上,我覆盖了以下方法:

@Override
protected void doEdit(OutcomeWagerLimit bean) {
    copyMyBean = bean;
    super.doEdit(bean);
}

@Override
public boolean save() {
    String desc = copyMyBean.getDescription();

    StringBuilder captionBuilder = new StringBuilder()
            .append("Save ")
            .append(desc)
            .append("?");
    StringBuilder messageBuilder = new StringBuilder()
            .append("Do you really want to save ")
            .append(desc)
            .append("?");

    openConfirmMsgBox(captionBuilder.toString(), messageBuilder.toString(),() -> super.save(), ()->super.cancel());
    return true;
}

使用此代码,单击“保存”将打开我的确认模式。如果点击保存,一切正常,但点击我的模式取消将调用 EditorImpl.cancel() 方法,以一种奇怪的方式运行。单击我的模式上的取消将关闭编辑模式,但如果我再次编辑任何其他行(双击它),网格的保存和取消按钮(不是模式按钮)将停止工作。没有从客户端向 vaadin 的 servlet 发起任何请求。

有没有人知道任何可能的解决方案或更好的方法来达到我想要达到的目标?

提前致谢

早上好,

刚刚做到了。由于不使用数据提供者而是使用普通列表,因此我负责将数据保存在其他 saveEventListener 中。那是呈现模态的时刻,在 "ok" 的情况下将其保存在数据库中。

因此无需重写 EditorImpl 保存方法并在 saveEventListener 中执行。

谢谢