3.5.5.2. 标准操作
框架提供了一些标准操作用于处理常见任务,例如为表格中选择的实体调用编辑界面。通过在 type
属性中指定其类型,就可以在界面 XML 描述中声明标准操作,例如:
<!-- in a table -->
<action type="create"/>
<!-- in a PickerField -->
<action id="lookup" type="picker_lookup"/>
标准操作根据自身的类型和所关联的组件对自身进行配置,有情况下需要指定额外的配置参数。
标准操作分为两类:
可以在项目中创建相似的操作或覆盖现有的标准操作类型。
例如,假设需要一个操作来显示表中当前所选实体的实例名称,并且希望通过仅指定其类型在多个界面中使用此操作。以下是创建此类操作的步骤。
创建一个操作类添加
@ActionType
注解,在这个注解里指定操作名称:package com.company.sample.web.actions;
import com.haulmont.cuba.core.entity.Entity;
import com.haulmont.cuba.core.global.MetadataTools;
import com.haulmont.cuba.gui.ComponentsHelper;
import com.haulmont.cuba.gui.Notifications;
import com.haulmont.cuba.gui.components.ActionType;
import com.haulmont.cuba.gui.components.Component;
import com.haulmont.cuba.gui.components.actions.ItemTrackingAction;
import javax.inject.Inject;
@ActionType("showSelected")
public class ShowSelectedAction extends ItemTrackingAction {
@Inject
private MetadataTools metadataTools;
public ShowSelectedAction(String id) {
super(id);
setCaption("Show Selected");
}
@Override
public void actionPerform(Component component) {
Entity selected = getTarget().getSingleSelected();
if (selected != null) {
Notifications notifications = ComponentsHelper.getScreenContext(target).getNotifications();
notifications.create()
.setType(Notifications.NotificationType.TRAY)
.setCaption(metadataTools.getInstanceName(selected))
.show();
}
}
}
在
web-spring.xml
文件中,添加<gui:actions>
元素,其中base-packages
属性指向一个包,在这个包里可以找到带注解的操作类:<beans ... xmlns:gui="http://schemas.haulmont.com/cuba/spring/cuba-gui.xsd">
<!-- ... -->
<gui:actions base-packages="com.company.sample.web.actions"/>
</beans>
现在,可以通过指定操作类型的名称在界面描述中声明这个操作:
<groupTable id="customersTable">
<actions>
<action id="show" type="showSelected"/>
</actions>
<columns>
<!-- ... -->
</columns>
<buttonsPanel>
<button action="customersTable.show"/>
</buttonsPanel>
</groupTable>