3.5.4.2. 标准操作

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

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

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

标准操作分为两类:

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

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

  • 创建一个操作类添加 @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. }
  • 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>
  • 现在,可以通过指定操作类型的名称在界面描述中声明这个操作:
  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>