我是 vaadin 的新手,我对save
and cancel
button
when有点困惑setEditorEnabled = true
。
您是否需要提供额外的代码来保存数据,或者当您单击保存时它会自动将所有数据保存到数据库中?
如果有附加代码,我如何向保存和取消按钮添加侦听器?
谢谢!
我是 vaadin 的新手,我对save
and cancel
button
when有点困惑setEditorEnabled = true
。
您是否需要提供额外的代码来保存数据,或者当您单击保存时它会自动将所有数据保存到数据库中?
如果有附加代码,我如何向保存和取消按钮添加侦听器?
谢谢!
如果您使用缓冲模式,当您按下 Save 按钮时,已编辑的值将写入源对象。如果您使用无缓冲模式,则版本会立即写入,因此“保存并取消”按钮变得毫无意义。如果要将编辑后的对象写回数据库,则需要手动添加该功能。在这种情况下使用缓冲模式并将数据库调用方法添加到按下保存按钮时调用的方法是实用的。
除了将它添加到 aCommitHandler
的方法中,postCommit
就像 Daniel Dubec 所写的那样,您还可以覆盖.saveEditor()
doCancelEditor()
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()
在editorFieldGroup
. 但这只有在可编辑网格处于缓冲模式时才有意义。在此处阅读有关字段缓冲的更多信息。所以发生的情况是,当您按下保存按钮并被super.saveEditor()
调用时,首先触发预提交事件,然后将编辑器字段值中的更改更新到数据源(即提交本身),然后提交后事件被触发。每当编辑器本身关闭时都会调用该doCancelEditor()
方法,这也是保存后调用它的原因。
或者使用 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());
}
});
尝试为 FieldGroup 添加 CommitHandler
grid.setEditorEnabled(true);
// register save listener
grid.getEditorFieldGroup().addCommitHandler(new CommitHandler() {
@Override
public void preCommit(CommitEvent commitEvent) throws CommitException {
}
@Override
public void postCommit(CommitEvent commitEvent) throws CommitException {
// You can persist your data here
Notification.show("Item " + grid.getEditedItemId() + " was edited.");
}
});