3.5.5.2.12. RemoveAction
RemoveAction - действие с коллекцией, предназначенное для удаления экземпляров сущности из базы данных и из контейнера данных в UI.
Действие реализовано классом com.haulmont.cuba.gui.actions.list.RemoveAction
и объявляется в XML с помощью атрибута type="remove"
. Общие свойства действий можно конфигурировать с помощью атрибутов элемента action
, подробнее см. раздел Декларативное создание действий. Ниже рассматриваются параметры, специфичные для класса RemoveAction
.
Следующие параметры можно установить и в XML и в Java:
-
confirmation
- булевское значение, указывающее, отображать ли диалог подтверждения перед удалением. По умолчанию true. -
confirmationMessage
- сообщение диалога подтверждения. По умолчанию, берется из главного пакета сообщений по ключуdialogs.Confirmation.Remove
. -
confirmationTitle
- заголовок диалога подтверждения. По умолчанию, берется из главного пакета сообщений по ключуdialogs.Confirmation
key.
Например, если необходимо задать определенное сообщение диалога подтверждения, можно сконфигурировать действие в XML:
<action id="remove" type="remove">
<properties>
<property name="confirmation" value="true"/>
<property name="confirmationTitle" value="Removing customer..."/>
<property name="confirmationMessage" value="Do you really want to remove the customer?"/>
</properties>
</action>
В качестве альтернативы, действие можно инжектировать в контроллер экрана и сконфигурировать, используя сеттеры:
@Named("customersTable.remove")
private RemoveAction customersTableRemove;
@Subscribe
public void onInit(InitEvent event) {
customersTableRemove.setConfirmation(true);
customersTableRemove.setConfirmationTitle("Removing customer...");
customersTableRemove.setConfirmationMessage("Do you really want to remove the customer?");
}
Далее рассматриваются параметры, которые можно сконфигурировать только программно в Java. Для генерации корректно аннотированных методов для этих параметров используйте закладку Handlers окна инструментов Component Inspector в Studio.
-
afterActionPerformedHandler
- обработчик, вызываемый после того, как выбранные сущности удалены. Принимает объект события, который можно использовать для получения выбранных для удаления экземпляров. Например:@Install(to = "customersTable.remove", subject = "afterActionPerformedHandler") protected void customersTableRemoveAfterActionPerformedHandler(RemoveOperation.AfterActionPerformedEvent<Customer> event) { System.out.println("Removed " + event.getItems()); }
-
actionCancelledHandler
- обработчик, вызываемый если операция удаления отменена пользователем в диалоге подтверждения. Принимает объект события, который можно использовать для получения выбранных для удаления экземпляров. Например:@Install(to = "customersTable.remove", subject = "actionCancelledHandler") protected void customersTableRemoveActionCancelledHandler(RemoveOperation.ActionCancelledEvent<Customer> event) { System.out.println("Cancelled"); }
Для того, чтобы произвести какие-либо проверки, или взаимодействовать с пользователем перед выполнением действия, необходимо подписаться на событие ActionPerformedEvent
действия и в нужный момент вызвать метод execute()
. Действие будет вызвано со всеми параметрами, которые были для него заданы. В примере ниже перед выполнением действия отображается кастомный диалог подтверждения:
@Named("customersTable.remove")
private RemoveAction customersTableRemove;
@Subscribe("customersTable.remove")
public void onCustomersTableRemove(Action.ActionPerformedEvent event) {
customersTableRemove.setConfirmation(false);
dialogs.createOptionDialog()
.withCaption("My fancy confirm dialog")
.withMessage("Do you really want to remove the customer?")
.withActions(
new DialogAction(DialogAction.Type.YES)
.withHandler(e -> customersTableRemove.execute()), // execute action
new DialogAction(DialogAction.Type.NO)
)
.show();
}
Можно также подписаться на ActionPerformedEvent
, и вместо вызова метода execute()
действия, использовать RemoveOperation
API напрямую. По сути, в этом случае все специфичные параметры действия игнорируются, и действуют только общие параметры: caption, icon, и т.д. Например:
@Inject
private RemoveOperation removeOperation;
@Subscribe("customersTable.remove")
public void onCustomersTableRemove(Action.ActionPerformedEvent event) {
removeOperation.builder(customersTable)
.withConfirmationTitle("Removing customer...")
.withConfirmationMessage("Do you really want to remove the customer?")
.remove();
}