CreateAction
- действие с идентификатором create. Предназначено для создания нового экземляра сущности и открытия экрана редактирования для этого экземпляра. Если экран редактирования
успешно закоммитил новый экземпляр в базу данных, то CreateAction
добавляет этот новый экземпляр в источник данных таблицы и делает его выбранным.
В классе CreateAction
определены следующие специфические методы:
-
setOpenType()
- позволяет задать режим открытия экрана редактирования новой сущности. По умолчанию экран открывается в режимеTHIS_TAB
.Так как довольно часто требуется открывать экраны редактирования в другом режиме (как правило,
DIALOG
), при декларативном создании действияcreate
в элементеaction
можно указать атрибутopenType
с нужным значением. Это избавляет от необходимости получать ссылку на действие в контроллере и программно устанавливать данное свойство. Например:<table id="usersTable"> <actions> <action id="create" openType="DIALOG"/>
-
setWindowId()
- позволяет задать идентификатор экрана редактирования сущности. По умолчанию используется экран{имя_сущности}.edit
, напримерsales$Customer.edit
. -
setWindowParams()
- позволяет задать параметры экрана редактирования, передаваемые в его методinit()
. -
setInitialValues()
- позволяет задать начальные значения атрибутов создаваемой сущности. Принимает объектMap
, в котором ключами являются имена атрибутов, а значениями - значения атрибутов. Например:Map<String, Object> values = new HashMap<>(); values.put("type", CarType.PASSENGER); carCreateAction.setInitialValues(values);
Пример использования
setInitialValues()
приведен также в разделе рецептов разработки. -
afterCommit()
- вызывается действием после того, как экран редактирования успешно закоммитил новую сущность и был закрыт. Данный метод не имеет реализации и может быть переопределен в наследниках для реакции на это событие. -
setAfterCommitHandler()
- позволяет задать обработчик, который будет вызван после того, как экран редактирования успешно закоммитил новую сущность и был закрыт. Данный обработчик можно использовать вместо переопределения методаafterCommit()
, тем самым избавившись от необходимости создания наследника действия. Например:@Named("customersTable.create") private CreateAction customersTableCreate; @Override public void init(Map<String, Object> params) { customersTableCreate.setAfterCommitHandler(new CreateAction.AfterCommitHandler() { @Override public void handle(Entity entity) { showNotification("Committed", NotificationType.HUMANIZED); } }); }
-
afterWindowClosed()
- вызывается действием в последнюю очередь после закрытия экрана редактирования, независимо от того, была ли закоммичена новая сущность или нет. Данный метод не имеет реализации и может быть переопределен в наследниках для реакции на это событие. -
setAfterWindowClosedHandler()
- позволяет задать обработчик, который будет вызван после закрытия экрана редактирования, независимо от того, была ли закоммичена новая сущность или нет. Данный обработчик можно использовать вместо переопределения методаafterWindowClosed()
, тем самым избавившись от необходимости создания наследника действия.