RemoveAction

RemoveAction is a list action designed to remove entity instances from a data container in UI and the database.

Действие реализовано классом io.jmix.ui.action.list.RemoveAction и объявляется в XML с помощью атрибута type="remove". Общие свойства действий можно конфигурировать с помощью атрибутов элемента action, подробнее см. раздел Декларативные действия. Ниже рассматриваются параметры, специфичные для класса RemoveAction.

Параметры

Следующие параметры можно установить и в XML, и в Java:

  • confirmation - булевское значение, указывающее, отображать ли диалог подтверждения перед удалением. По умолчанию true.

  • confirmationMessage - сообщение диалога подтверждения. По умолчанию, берется из главного пакета сообщений по ключу dialogs.Confirmation.Remove.

  • confirmationTitle - заголовок диалога подтверждения. По умолчанию, берется из главного пакета сообщений по ключу dialogs.Confirmation.

Например, если необходимо задать определенное сообщение диалога подтверждения, можно сконфигурировать действие в 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>
<action id="removeAction" type="remove"/>

В качестве альтернативы, действие можно инжектировать в контроллер экрана и сконфигурировать, используя сеттеры:

@Named("custTable.remove")
private RemoveAction<Customer> removeAction;

@Subscribe
public void onInit(InitEvent event) {
    removeAction.setConfirmation(true);
    removeAction.setConfirmationTitle("Removing customer...");
    removeAction.setConfirmationMessage("Do you really want to remove the customer?");
}

Обработчики

Далее рассматриваются параметры, которые можно сконфигурировать только программно в Java. Для генерации корректно аннотированных методов для этих параметров используйте Studio.

afterActionPerformedHandler

Это обработчик, вызываемый после того, как выбранные сущности удалены. Принимает объект события, который можно использовать для получения выбранных для удаления экземпляров. Например:

@Install(to = "custTable.remove", subject = "afterActionPerformedHandler")
private void custTableRemoveAfterActionPerformedHandler(RemoveOperation.AfterActionPerformedEvent<Customer> event) {
    System.out.println("Removed " + event.getItems());
}

actionCancelledHandler

Это обработчик, вызываемый если операция удаления отменена пользователем в диалоге подтверждения. Принимает объект события, который можно использовать для получения выбранных для удаления экземпляров. Например:

@Install(to = "custTable.remove", subject = "actionCancelledHandler")
private void custTableRemoveActionCancelledHandler(RemoveOperation.ActionCancelledEvent<Customer> event) {
    System.out.println("Cancelled");
}

Использование ActionPerformedEvent

Для того чтобы произвести какие-либо проверки, или взаимодействовать с пользователем перед выполнением действия, необходимо подписаться на событие ActionPerformedEvent действия и в нужный момент вызвать метод execute(). Действие будет вызвано со всеми параметрами, которые были для него заданы. В примере ниже перед выполнением действия отображается диалог подтверждения:

@Named("custTable.remove")
private RemoveAction<Customer> removeAction;

@Subscribe("custTable.remove")
public void onCustTableRemove(Action.ActionPerformedEvent event) {
    removeAction.setConfirmation(false);
    dialogs.createOptionDialog()
            .withCaption("My confirm dialog")
            .withMessage("Do you really want to remove the customer?")
            .withActions(
                    new DialogAction(DialogAction.Type.YES)
                            .withHandler(e -> removeAction.execute()), // execute action
                    new DialogAction(DialogAction.Type.NO)
            )
            .show();
}

Можно также подписаться на ActionPerformedEvent, и вместо вызова метода execute() действия, использовать для открытия экрана выбора ScreenBuilders API напрямую. По сути, в этом случае все специфичные параметры действия игнорируются, и действуют только общие параметры: caption, icon, и т.д. Например:

@Autowired
private RemoveOperation removeOperation;
@Subscribe("custTable.removeAction")
public void onCustTableRemoveAction(Action.ActionPerformedEvent event) {
    removeOperation.builder(custTable)
            .withConfirmationTitle("Removing customer...")
            .withConfirmationMessage("Do you really want to remove the customer?")
            .remove();
}