Встроенный редактор сетки - невозможно получить отредактированные значения столбца в методе сетки addCommitHandler - PullRequest
1 голос
/ 25 апреля 2019

Когда я пытаюсь нажать 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);

Ответы [ 2 ]

4 голосов
/ 26 апреля 2019

preCommit(FieldGroup.CommitEvent commitEvent) вызывается перед фиксацией. Таким образом, bean-компонент BeanItem (Пользователь) содержит старые значения (новые значения еще не были переданы в 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 голосов
/ 26 апреля 2019

Мы можем получить новое значение в самом методе preCommit () с помощью следующего кода,

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