Собственные типы действий

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

BaseAction

Можно создать собственный класс действия и привязать его к компоненту. Ниже минимальный пример, при котором кнопка покажет пользователю "Hello" при нажатии.

  1. Создайте класс действия, наследующий BaseAction, и добавьте аннотацию @ActionType с желаемым именем типа:

    package com.company.onboarding.view.actions;
    
    import com.vaadin.flow.component.Component;
    import io.jmix.flowui.Notifications;
    import io.jmix.flowui.action.ActionType;
    import io.jmix.flowui.kit.action.BaseAction;
    import org.springframework.beans.factory.annotation.Autowired;
    
    @ActionType("myAction")
    public class MyCustomAction extends BaseAction {
    
        @Autowired
        private Notifications notifications;
    
        public MyCustomAction(String id) {
            super(id);
            setText("Click me!");
        }
    
         @Override
         public void actionPerform (Component component) {
             notifications.create("Hello!")
                     .withType(Notifications.Type.SUCCESS)
                     .show();
         }
    }
    Если вы хотите переопределить существующий тип действия, просто зарегистрируйте свое новое действие с таким же именем типа в аннотации @ActionType.
  2. Объявите действие в дескрипторе экрана, просто указав его тип:

    <action id="myAction" type="myAction"/>
  3. Действие можно привязать к компоненту:

    <button id="actionBtn" action="myAction"/>

ItemsTrackingAction

Если требуется действие, которое становится доступным при выборе одной или нескольких строк в таблице, используйте ItemTrackingAction. Предположим, что вы хотите создать действие, которое бы показывало имя экземпляра текущей сущности, выбранной в dataGrid, и использовать это действие в различных экранах, указывая только его тип. Чтобы это сделать, необходимо выполнить следующие шаги:

  1. Создайте для действия отдельный класс с аннотацией @ActionType, в которой укажите желаемое имя типа:

    package com.company.onboarding.view.actions;
    
    import com.vaadin.flow.component.Component;
    import io.jmix.core.MetadataTools;
    import io.jmix.flowui.Notifications;
    import io.jmix.flowui.action.ActionType;
    import io.jmix.flowui.action.list.ItemTrackingAction;
    import org.springframework.beans.factory.annotation.Autowired;
    
    @ActionType("showSelected")
    public class ShowSelectedAction<E> extends ItemTrackingAction<E> {
    
        @Autowired
        private MetadataTools metadataTools;
    
        @Autowired
        private Notifications notifications;
    
        public ShowSelectedAction(String id) {
            super(id);
            setText("Show Selected");
        }
    
        @Override
        public void actionPerform(Component component) {
            if (getTarget() != null) {
                E selected = getTarget().getSingleSelectedItem();
                if (selected != null) {
                    notifications.create(metadataTools.getInstanceName(selected)).show();
                }
            }
        }
    }
    Если вы хотите переопределить существующий тип действия, просто зарегистрируйте свое новое действие с таким же именем типа в аннотации @ActionType.
  2. Теперь вы можете использовать действие в дескрипторах экрана, просто указывая его тип:

    <action id="showSelected" type="showSelected"/>