Перейдите на вкладку 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
, в котором еще нет изменений, внесенных процессом. Для отображения этих изменений необходимо перечитать сущности из базы
данных.