【问题标题】:Add action to a cancel button in an editable grid in vaadin在 vaadin 的可编辑网格中向取消按钮添加操作
【发布时间】:2015-09-29 13:38:14
【问题描述】:

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

(以防万一,图片取自这里Book of Vaadin

与:

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{}
});

我可以在保存操作中做一些事情。 但是,我可以用取消操作做类似的事情吗?

谢谢。

【问题讨论】:

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

标签: grid vaadin cancel-button fieldeditor


【解决方案1】:

这是组件的严重缺陷。根据论坛的说法,他们正在努力,但目前似乎最直接的方法是扩展 Grid 组件并覆盖 doCancelEditor 方法。这是一个sn-p:

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 设计中引用新组件。

【讨论】:

    【解决方案2】:

    实际上,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
        */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-16
      • 2021-10-04
      • 2014-09-25
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      相关资源
      最近更新 更多