Собственные типы действий
В проекте можно создать собственные типы действий или переопределить существующие стандартные типы. Такие действия затем могут использоваться повторно во всех экранах приложения, как показано в примерах ниже.
BaseAction
Можно создать собственный класс действия и привязать его к компоненту. Ниже минимальный пример, при котором кнопка покажет пользователю "Hello" при нажатии.
-
Создайте класс действия, наследующий
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. -
Объявите действие в дескрипторе экрана, просто указав его тип:
<action id="myAction" type="myAction"/> -
Действие можно привязать к компоненту:
<button id="actionBtn" action="myAction"/>
ItemsTrackingAction
Если требуется действие, которое становится доступным при выборе одной или нескольких строк в таблице, используйте ItemTrackingAction. Предположим, что вы хотите создать действие, которое бы показывало имя экземпляра текущей сущности, выбранной в dataGrid, и использовать это действие в различных экранах, указывая только его тип. Чтобы это сделать, необходимо выполнить следующие шаги:
-
Создайте для действия отдельный класс с аннотацией
@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. -
Теперь вы можете использовать действие в дескрипторах экрана, просто указывая его тип:
<action id="showSelected" type="showSelected"/>