自定义操作类型

在项目中可以新建自定义操作类型或者重载已有的标准操作类型。之后这些自定义的操作可以在应用程序的所有视图中使用,如下面的示例所展示的。

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"/>