3.5.5.2.1. 列表组件操作
框架为实现了 ListComponent
接口的可视化组件(DataGrid 、 Table 、 GroupTable 、 TreeTable 和 Tree)提供了一组标准操作,这些操作在 com.haulmont.cuba.gui.actions.list
包中。
在表格中使用标准操作的示例:
<groupTable id="customersTable" width="100%" dataContainer="customersDc">
<actions>
<action id="create" type="create"/>
<action id="edit" type="edit"/>
<action id="remove" type="remove"/>
</actions>
<columns>
<column id="name"/>
<column id="email"/>
</columns>
<buttonsPanel>
<button id="createBtn" action="customersTable.create"/>
<button id="editBtn" action="customersTable.edit"/>
<button id="removeBtn" action="customersTable.remove"/>
</buttonsPanel>
</groupTable>
标准列表组件操作包括以下类型:
create
- 类型由com.haulmont.cuba.gui.actions.list.CreateAction
类实现。它被设计用于使用其默认编辑界面创建新实体。edit
- 类型由com.haulmont.cuba.gui.actions.list.EditAction
类实现。它被设计用于使用其默认编辑界面编辑所选实体。remove
- 类型由com.haulmont.cuba.gui.actions.list.RemoveAction
类实现。它被设计用于删除所选实体。add
- 类型由com.haulmont.cuba.gui.actions.list.AddAction
类实现。它被设计用于从默认查找界面选取实体然后将其添加到关联的数据容器。这个操作典型的用例是用来为多对多集合添加实体。exclude
- 类型由com.haulmont.cuba.gui.actions.list.ExcludeAction
类实现。它被设计用于从集合数据容器中删除实体但是不从数据库删除。这个操作典型的用例是从多对多集合中删除实体。refresh
- 类型由com.haulmont.cuba.gui.actions.list.RefreshAction
类实现。它被设计用于重新加载列表组件使用的数据容器。excel
- 类型由com.haulmont.cuba.gui.actions.list.ExcelAction
类实现。它被设计用于将列表组件内容输出到 XLS 文件。
bulkEdit
类型通过com.haulmont.cuba.gui.actions.list.BulkEditAction
类实现。其设计为可以一次修改多个实体实例的属性值。使用方法跟其它操作一样,示例:<table id="table" width="100%" dataContainer="customersCt">
<actions>
...
<action id="bulkEdit" type="bulkEdit"/>
</actions>
...
<rowsCount/>
<buttonsPanel alwaysVisible="true">
...
<button action="table.bulkEdit"/>
</buttonsPanel>
<rows/>
</table>
此外,
BulkEditorWindow
可以用com.haulmont.cuba.gui.BulkEditors
bean 使用编程的方式创建:bulkEditors.builder(metaClass, table.getSelected(), getWindow().getFrameOwner())
.withListComponent(table)
.create()
.show();
标准操作为基本参数(题、图标和快捷键)提供默认值以及执行时的默认行为。可以在 XML 中为基本参数提供自己的值,就像其它任何操作一样。例如,可以指定自定义图标:
<action id="create" type="create" icon="USER"/>
要自定义执行行为,应该订阅操作的 ActionPerformedEvent
。如果提供了自己的操作监听器,则所有标准操作都不会执行。这意味着 自定义的 ActionPerformedEvent
处理器已经覆盖了默认的操作行为。
例如,以下代码将覆盖默认的 create
操作行为,以使用以模式对话框打开的特定界面创建 Customer
实体:
public class CustomerBrowse extends StandardLookup<Customer> {
@Inject
private GroupTable<Customer> customersTable;
@Inject
private ScreenBuilders screenBuilders;
@Subscribe("customersTable.create")
protected void onCustomersTableCreateActionPerformed(Action.ActionPerformedEvent event) {
screenBuilders.editor(customersTable)
.newEntity()
.withScreenClass(CustomerEdit.class) // specific editor screen
.withLaunchMode(OpenMode.DIALOG) // open as modal dialog
.build()
.show();
}
}
跟自定义 create
一样,可以对 edit
的行为进行定制。对有关更多详细信息,请参阅 ScreenBuilders bean 描述.
add
行为使用的是 ScreenBuilders
bean,所以可以按照下面的方式进行定制:
public class CustomerEdit extends StandardEditor<Customer> {
@Inject
private ScreenBuilders screenBuilders;
@Inject
private Table<Employee> accountableTable;
@Subscribe("accountableTable.add")
protected void onAccountableTableAddActionPerformed(Action.ActionPerformedEvent event) {
screenBuilders.lookup(Employee.class, this)
.withListComponent(accountableTable)
.withScreenClass(EmployeeBrowse.class) // specific editor screen
.withLaunchMode(OpenMode.DIALOG) // open as modal dialog
.build()
.show();
}
}