Vaadin网格 - 当setEnableEditor = true时保存/取消

时间:2015-06-08 10:03:53

标签: java vaadin vaadin7 vaadin-grid

我是vaadin的新手,我在save时对cancelbutton setEditorEnabled = true感到有些困惑。

您是否需要提供其他代码才能保存数据,或者在您单击“保存”时自动将所有数据保存到数据库中?

如果有附加代码,如何在保存和取消按钮中添加监听器?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果使用缓冲模式,则在按“保存”按钮时,编辑的值将写入源对象。如果使用无缓冲模式,则会立即写入版本,因此“保存”和“取消”按钮变得毫无意义。 如果要将编辑的对象写回数据库,则需要手动添加该功能。在这种情况下使用缓冲模式是实用的,并将数据库调用方法添加到按下保存按钮时调用的方法。

除了将其添加到CommitHandler postCommit方法(如Daniel Dubec所写)之外,您还可以覆盖saveEditor()doCancelEditor()方法{ {1}}。

Grid

class MyGrid extends Grid { public MyGrid() { setEditorEnabled(true); setEditorBuffered(true); } @Override public void saveEditor() throws CommitException { super.saveEditor(); // You can persist your data here. Notification.show("Item " + getEditedItemId() + " was edited."); } // Be aware that doCancelEditor() is called whenever super.saveEditor() is called! @Override protected void doCancelEditor() { super.doCancelEditor(); // editedItemId was already set to 'null'. Notification.show("Cancel button was pressed"); } } 实际上在super.saveEditor()上调用commit()方法。但是,如果可编辑网格处于缓冲模式,这只是有意义的。 Read more on Field Buffering here。 那么当你按下保存按钮并调用editorFieldGroup时会发生什么,然后首先触发预提交事件,然后将编辑器字段值中的更改更新为数据源(即提交自己),然后触发提交后事件。只要编辑器本身关闭就会调用super.saveEditor()方法,这就是为什么在保存之后调用它。

答案 1 :(得分:1)

或使用saveListener。我不确定这是否是最好的方法,但是对我有用。

Grid<Bean> grid;
grid.getEditor().addSaveListener(new EditorSaveListener<Bean>() {
            @Override
            public void onEditorSave(EditorSaveEvent<Bean> event) {
                // You can persist your data here
                persistBean(event.getBean());
            }
        });

答案 2 :(得分:0)

尝试为FieldGroup添加CommitHandler

<img>