标准操作

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

每个标准操作都通过一个使用了 @ActionType("<some_type>") 注解的类实现。该类定义了操作的默认属性和行为。

可以通过指定基本操作的 XML 属性来覆盖通用的属性:captioniconshortcut 等。示例:

<action id="create" type="create"
        caption="Create customer" icon="USER_PLUS"/>

有两种类型的标准操作:

列表组件操作

列表组件操作用于处理展示在表格或树中的实体集合。包括 AddActionBulkEditActionCreateActionEditActionExcludeActionRefreshActionRelatedActionRemoveActionViewAction

当表格、树或者数据网格添加了列表组件操作之后,可以从组件的右键菜单或者预定义的快捷键调用这些操作。通常也会使用添加在按钮面板的一个按钮调用操作。

<groupTable id="customersGroupTable"
            width="100%"
            dataContainer="customersDc">
    <actions>
        <action id="create" type="create"/>
        <action id="edit" type="edit"/>
        <action id="remove" type="remove"/>
    </actions>
    <columns>
        <column id="firstName"/>
        <column id="lastName"/>
    </columns>
    <buttonsPanel alwaysVisible="true">
        <button action="customersGroupTable.create"/>
        <button action="customersGroupTable.edit"/>
        <button action="customersGroupTable.remove"/>
    </buttonsPanel>
</groupTable>

选取器组件操作

选取器组件操作用于处理选取器组件的内容。包括 EntityClearActionEntityLookupActionEntityOpenActionEntityOpenCompositionActionTagLookupActionValueClearActionValuesSelectAction

当组件添加了选取器操作之后,自动使用组件的内嵌按钮展示。

<entityPicker dataContainer="orderDc"
              property="customer"
              caption="msg://ui.ex1.entity/Order.customer">
    <actions>
        <action id="lookup" type="entity_lookup"/>
        <action id="open" type="entity_open"/>
        <action id="clear" type="entity_clear"/>
    </actions>
</entityPicker>

附加属性

标准操作带有附加参数,可以在 XML 进行设置或者在 Java 中用 setter 方法进行设置。在 XML 中,使用内部的 <properties> 元素设置,其中每个 <property> 元素对应一个操作类中的 setter 方法:

<action id="create" type="create">
    <properties>
        <property name="openMode" value="DIALOG"/>
        <property name="screenClass" value="ui.ex1.screen.entity.customer.CustomerEdit"/>
    </properties>
</action>

在 Java 控制器也可以做同样的设置:

@Named("customersGroupTable.create")
private CreateAction<Customer> createAction;

@Subscribe
public void onInit(InitEvent event) {
    createAction.setOpenMode(OpenMode.DIALOG);
    createAction.setScreenClass(CustomerEdit.class);
}

注册处理器

如果一个 setter 接收功能接口参数,可以在界面控制器注册一个处理方法。比如,CreateActionsetAfterCommitHandler(Consumer) 方法,设置一个处理方法,该方法会在创建的实体提交之后调用。那么可以按照下面的方式注册处理器:

@Install(to = "customersGroupTable.create", subject = "afterCommitHandler")
private void customersGroupTableCreateAfterCommitHandler(Customer customer) {
    notifications.create()
            .withCaption("Created  " + customer)
            .show();
}

可以用 Studio 生成处理器的实现桩代码。

所有的操作都有一个通用的 enabledRule 处理器,可以根据不同的情景设置操作的 “启用” 状态。下面的例子中,对某些实体禁用了 RemoveAction

@Autowired
private GroupTable<Customer> customersGroupTable;

@Install(to = "customersGroupTable.remove", subject = "enabledRule")
private boolean customersGroupTableRemoveEnabledRule() {
    Set<Customer> customers = customersGroupTable.getSelected();
    return canBeRemoved(customers);
}