3.5.5.2. 标准操作

框架提供了一些标准操作用于处理常见任务,例如为表格中选择的实体调用编辑界面。通过在 type 属性中指定其类型,就可以在界面 XML 描述中声明标准操作,例如:

  1. <!-- in a table -->
  2. <action type="create"/>
  3. <!-- in a PickerField -->
  4. <action id="lookup" type="picker_lookup"/>

标准操作根据自身的类型和所关联的组件对自身进行配置,有情况下需要指定额外的配置参数。

标准操作分为两类:

可以在项目中创建相似的操作或覆盖现有的标准操作类型。

例如,假设需要一个操作来显示表中当前所选实体的实例名称,并且希望通过仅指定其类型在多个界面中使用此操作。以下是创建此类操作的步骤。

  1. 创建一个操作类添加 @ActionType 注解,在这个注解里指定操作名称:

    1. package com.company.sample.web.actions;
    2. import com.haulmont.cuba.core.entity.Entity;
    3. import com.haulmont.cuba.core.global.MetadataTools;
    4. import com.haulmont.cuba.gui.ComponentsHelper;
    5. import com.haulmont.cuba.gui.Notifications;
    6. import com.haulmont.cuba.gui.components.ActionType;
    7. import com.haulmont.cuba.gui.components.Component;
    8. import com.haulmont.cuba.gui.components.actions.ItemTrackingAction;
    9. import javax.inject.Inject;
    10. @ActionType("showSelected")
    11. public class ShowSelectedAction extends ItemTrackingAction {
    12. @Inject
    13. private MetadataTools metadataTools;
    14. public ShowSelectedAction(String id) {
    15. super(id);
    16. setCaption("Show Selected");
    17. }
    18. @Override
    19. public void actionPerform(Component component) {
    20. Entity selected = getTarget().getSingleSelected();
    21. if (selected != null) {
    22. Notifications notifications = ComponentsHelper.getScreenContext(target).getNotifications();
    23. notifications.create()
    24. .setType(Notifications.NotificationType.TRAY)
    25. .setCaption(metadataTools.getInstanceName(selected))
    26. .show();
    27. }
    28. }
    29. }
  2. web-spring.xml 文件中,添加 <gui:actions> 元素,其中 base-packages 属性指向一个包,在这个包里可以找到带注解的操作类:

    1. <beans ... xmlns:gui="http://schemas.haulmont.com/cuba/spring/cuba-gui.xsd">
    2. <!-- ... -->
    3. <gui:actions base-packages="com.company.sample.web.actions"/>
    4. </beans>
  3. 现在,可以通过指定操作类型的名称在界面描述中声明这个操作:

    1. <groupTable id="customersTable">
    2. <actions>
    3. <action id="show" type="showSelected"/>
    4. </actions>
    5. <columns>
    6. <!-- ... -->
    7. </columns>
    8. <buttonsPanel>
    9. <button action="customersTable.show"/>
    10. </buttonsPanel>
    11. </groupTable>