3.6.1.1.3. 查找界面
查找界面设计用来选择并且返回实体实例或者实体列表。可视化组件中的 PickerField 和 LookupPickerField 使用的标准 LookupAction 就是调用查找界面来选择相关的实体。
当通过 openLookup()
方法调用查找界面的时候,界面会包含一个面板以及用来选择的一些按钮。当用户选择了一个实例或者多个实例的时候,查找界面调用之前传递给它的处理器函数,从而能将查找结果返回给调用者的代码。当通过 openWindow()
方法或者比如说通过主菜单打开查找界面的时候,用来选择的面板不会显示,查找界面会被有效的转化成一个简单界面。
查找界面的控制器必须从 AbstractLookup 类继承。界面 XML 描述中的 lookupComponent
属性必须指向一个组件(比如表格),从这个组件中选择需要的实体实例作为查找结果。
可以在 Studio 里使用 Entity browser 或者 Entity combined screen 模板来创建实体的查找界面。 |
默认情况下,LookupAction 会使用注册在 screens.xml 文件中的一个查找界面,注册的标识符是 {entity_name}.lookup
或者 {entity_name}.browse
,比如,sales$Customer.lookup
。所以在使用上面提到的组件的时候,确保有个查找界面已经注册。Studio 会使用 {entity_name}.browse
标识符注册浏览界面,所以这些界面会被默认当作查找界面使用。
自定义查找界面样式和行为
需要更改项目中所有查找界面的查找按钮面板(Select 和 Cancel 按钮),可以创建一个界面子框架(frame)并且使用
lookupWindowActions
标识符注册。系统默认的界面框架在/com/haulmont/cuba/gui/lookup-window.actions.xml
。自定义的界面框架必须包含一个链接到lookupSelectAction
行为的按钮(当界面作为查找界面打开时会自动添加这个按钮)。需要在某些特定的界面替换查找按钮面板,只需要在界面中创建一个链接到
lookupSelectAction
行为的按钮,这样的话平台不会添加默认的按钮面板。示例:<layout expand="table">
<hbox>
<button id="selectBtn" caption="Select item"
action="lookupSelectAction"/>
</hbox>
<!-- ... -->
</layout>
需要用自定义的操作替换掉默认的选择动作时,只需要在控制器添加自定义的 action:
@Override
public void init(Map<String, Object> params) {
addAction(new SelectAction(this) {
@Override
protected Collection getSelectedItems(LookupComponent lookupComponent) {
Set<MyEntity> selected = new HashSet<>();
// ...
return selected;
}
});
}
使用
com.haulmont.cuba.gui.components.SelectAction
作为 action 的基类,如果需要的话,重写里面的方法。