Grid 向vaadin中可编辑网格中的“取消”按钮添加操作

Grid 向vaadin中可编辑网格中的“取消”按钮添加操作,grid,vaadin,cancel-button,fieldeditor,Grid,Vaadin,Cancel Button,Fieldeditor,我正在使用Vaadin 7的可编辑网格。当一行处于编辑模式时,它显示两个按钮:保存和取消 (以防万一,这张照片是从这里拍摄的) 与: grid.getEditorFieldGroup().addCommitHandler(new CommitHandler() { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override public voi

我正在使用Vaadin 7的可编辑网格。当一行处于编辑模式时,它显示两个按钮:保存和取消

(以防万一,这张照片是从这里拍摄的)

与:

grid.getEditorFieldGroup().addCommitHandler(new CommitHandler() {
    private static final long serialVersionUID = 1L;
    @SuppressWarnings("unchecked")
    @Override
    public void preCommit(CommitEvent commitEvent) throws CommitException{}
    @Override
    public void postCommit(CommitEvent commitEvent) throws CommitException{}
});
我可以在保存操作中做一些事情。 但是,我可以用取消操作做类似的事情吗


谢谢。

这是该部件的严重缺陷。据论坛称,他们正在研究,但目前看来最直接的方法是扩展网格组件并覆盖docancelditor方法。下面是一个片段:

public class MyGrid extends Grid {

protected Object newRow;

@Override
protected void doCancelEditor() {
    super.doCancelEditor();
    getContainerDataSource().removeItem(newRow);
    setEditorEnabled(false);

}

public void setNewRow(Object newRow) {
    this.newRow = newRow;

}
请注意,创建行时必须告诉MyGrid对象。另外,请注意,您正在扩展服务器端,因此不必更改客户端(小部件代码),但您确实需要在UI设计中引用新组件。

实际上,saveEditor()也应该被覆盖,因为doCancelEditor()似乎也会在保存操作中被调用。我的代码:

    public class MyGrid extends Grid {

       private boolean addingMode = false;
       private JPAContainer<SomeEntity> container;
       private Object recentlyAddedItemID;

       public MyGrid(Indexed indexed) {
          container = indexed; 
       }

       @Override
       protected void doCancelEditor() {
          Object id = getEditedItemId();
          super.doCancelEditor();
          if (addingMode) {
             getContainerDataSource().removeItem(id);
             recentlyAddedItemID = null;
          }              
          addingMode = false;
       }

       @Override
       public void saveEditor() throws FieldGroup.CommitException {
          if (addingMode) recentlyAddedItemID = getEditedItemId();
          addingMode = false;              
          super.saveEditor();
       }

       public Object getRecentlyAddedItemID() {
          return recentlyAddedItemID;
       }

       public void addNewElement(SomeEntity entity) {
          addingMode = true;          
          editItem(container.addEntity(entity));
       }       
    }

    MyGrid grid = new MyGrid(JPAContainerFactory.make(SomeEntity.class, entityManager));    
    grid.addNewElement(new SomeEntity());
    /*
    if we want to know the new items's ID (actually the new primary key
    in case of JPAContainer), we can check it by:
    */
    Object id = grid.getRecentlyAddedItemID();
    /*
    returns null if editor was cancelled and finally nothing new was persisted
    */
公共类MyGrid扩展了Grid{
私有布尔加法模式=false;
私人集装箱;
最近添加的私有对象;
公共MyGrid(索引){
容器=索引;
}
@凌驾
受保护的无效文档编辑器(){
对象id=GetEditEmid();
super.doCancelEditor();
如果(添加模式){
getContainerDataSource().removeItem(id);
recentlyAddedItemID=null;
}              
addingMode=false;
}
@凌驾
public void saveEditor()引发FieldGroup.CommitteException{
if(addingMode)recentlyAddedItemID=geteditemid();
addingMode=false;
super.saveEditor();
}
公共对象getRecentlyAddedItemID(){
最近返回addeditemid;
}
public void addNewElement(SomeEntity实体){
addingMode=true;
编辑项(容器.附件(实体));
}       
}
MyGrid grid=newmygrid(JPAContainerFactory.make(SomeEntity.class,entityManager));
addNewElement(newsomeEntity());
/*
如果我们想知道新项目的ID(实际上是新的主键
对于JPA容器),我们可以通过以下方式进行检查:
*/
对象id=grid.getRecentlyAddedItemID();
/*
如果编辑器被取消并且最终没有保留任何新内容,则返回null
*/

您到底想做什么?不,FieldGroup没有取消事件。也许您可以实现自己的EditorFieldGroup扩展并在那里处理它?我正在添加一个新的空行,如果单击“取消”按钮,我想删除它。