2.5.2.2. Контроллер экрана списка

Перейдите на вкладку Controller и замените ее содержимое на следующий код:

package com.sample.library.gui.ebook;

import java.util.Map;

import com.haulmont.cuba.core.entity.Entity;
import com.haulmont.cuba.gui.components.AbstractLookup;
import com.haulmont.cuba.gui.components.Table;
import com.haulmont.cuba.gui.components.actions.CreateAction;
import com.haulmont.cuba.gui.components.actions.EditAction;

import javax.inject.Inject;

public class EBookBrowse extends AbstractLookup {

    @Inject
    protected Table eBookTable;

    @Override
    public void init(Map<String, Object> params) {
        eBookTable.addAction(new CreateAction(eBookTable) {
            @Override
            protected void afterCommit(Entity entity) {
                eBookTable.getDatasource().refresh();
            }
        });
        eBookTable.addAction(new EditAction(eBookTable) {
            @Override
            protected void afterCommit(Entity entity) {
                eBookTable.getDatasource().refresh();
            }
        });
    }
}

Здесь в методе init() в таблицу eBookTable добавляются стандартные действия CreateAction и EditAction, но с переопределенным методом afterCommit(), в котором производится перезагрузка источника данных таблицы. Это делается для того, чтобы отобразить в таблице измененное состояние карточки сразу после ее сохранения и передвижения по процессу.

Стандартные действия CreateAction и EditAction не производят перезагрузки источника данных после коммита открываемого экрана редактирования. Вместо этого они получают сохраненный экземпляр сущности с Middleware и просто устанавливают его в источнике данных вместо исходного.

В нашем же случае перезагрузка из БД необходима потому, что после сохранения редактируемой сущности EBook запуск процесса производится в отдельной транзакции, и состояние карточки меняется как раз в этот момент. То есть после коммита экрана редактирования в источник данных возвращается экземпляр EBook, в котором еще нет изменений, внесенных процессом. Для отображения этих изменений необходимо перечитать сущности из базы данных.