网格内联编辑器 - 无法在网格的addCommitHandler方法中获取已编辑的列值

问题描述 投票:1回答:2

当我在用新用户名编辑列单元格后尝试单击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
2个回答
4
投票

在提交之前调用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);
            }
        });

0
投票

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

TextField nameField = (TextField) grid.getColumn("name").getEditorField();
nameField .getValue(); // new name
© www.soinside.com 2019 - 2024. All rights reserved.