【问题标题】:Grid inline editor - unable to get the edited column values in addCommitHandler method of grid网格内联编辑器 - 无法在网格的 addCommitHandler 方法中获取已编辑的列值
【发布时间】:2019-04-25 14:14:00
【问题描述】:

当我尝试在使用新用户名编辑列单元格后单击 save 时,我无法获取新的单元格值,而是获取旧值。

grid.getEditorFieldGroup().addCommitHandler(new FieldGroup.CommitHandler() 
{
    @Override
    public void preCommit(FieldGroup.CommitEvent commitEvent) throws     
    FieldGroup.CommitException {
        BeanItem item = (BeanItem)  
        commitEvent.getFieldBinder().getItemDataSource();
       User user= (User) item.getBean();
       user.getName();//getting the old value instead the new column value
     }
}

我使用了如下的 BeanItemContainer:

BeanItemContainer<User> container = new BeanItemContainer<User>(User.class);
grid.setContainerDataSource(container);

【问题讨论】:

    标签: vaadin vaadin7 vaadin-grid


    【解决方案1】:

    preCommit(FieldGroup.CommitEvent commitEvent) 在提交之前被称为。所以 BeanItem 的 bean (User) 包含旧值(新值尚未提交到 bean 中)。因此getName() 返回旧值。

    如果你想访问新的值,你必须使用postCommit(FieldGroup.CommitEvent commitEvent),它在提交之后被称为

    grid.getEditorFieldGroup().addCommitHandler(new FieldGroup.CommitHandler() {
                @Override
                public void preCommit(FieldGroup.CommitEvent commitEvent) {
                    BeanItem item = (BeanItem)
                            commitEvent.getFieldBinder().getItemDataSource();
                    User user = (User) item.getBean();
                    String name = user.getName(); // old value
                    System.out.println(name);
                }
    
                @Override
                public void postCommit(FieldGroup.CommitEvent commitEvent) {
                    BeanItem item = (BeanItem)
                            commitEvent.getFieldBinder().getItemDataSource();
                    User user = (User) item.getBean();
                    String name = user.getName(); // new value
                    System.out.println(name);
                }
            });
    

    【讨论】:

    • 谢谢@codinghaus!。
    【解决方案2】:

    我们可以通过以下代码在 preCommit() 方法本身中获取新值,

    TextField nameField = (TextField) grid.getColumn("name").getEditorField();
    nameField .getValue(); // new name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多