Skip to content
本页目录

数据选择(Lookup)

我们在业务操作过程很多时候需要选择数据, 常见的比如选择用户.

Fastball 对这种数据选择提供了高效的封装, 我们以最简单的选择员工为例了解一下 数据选择(Lookup) 的使用方式.

lookup.png

tree-lookup.png

编写 LookupAction

首先我们编写一个 LookupAction, 用于前端获取候选数据使用, 这里跟组件的写法基本一致. 只需要实现接口 dev.fastball.core.component.LookupAction, 同时声明 @UIComponent 即可. 代码示例:

java
@UIComponent
public class EmployeeLookupAction implements LookupAction<Employee, Object> {

    private final EmployeeRepository repo;

    @Override
    public Collection<Employee> loadLookupItems(Object o) {
        return repo.findAll();
    }
}

使用 LookupAction

我们可以在一些需要使用数据选择的字段上, 增加 @Lookup 注解, 同时声明所使用的 LookupAction 即可.

代码示例:

java
public class WorkEvaluation extends BasicModel {
    // ...
    @Field(title = "员工")
    @Lookup(value = EmployeeLookupAction.class, labelField = "name", valueField = "id")
    private Integer employeeId;
    // ...
}

树形查找 TreeAction

树形数据查找的写法跟 Lookup 基本一致, 差别是:

  1. 需实现的接口为 dev.fastball.core.component.TreeLookupAction
  2. 使用注解为: @dev.fastball.core.annotation.TreeLookup
  3. 需要声明子字段: @TreeLookup.childrenField

例如:

java
@UIComponent
@RequiredArgsConstructor
public class OrgTreeLookupAction implements TreeLookupAction<Org, Object> {

    private final OrgRepository orgRepository;

    @Override
    public Collection<Org> loadLookupItems(Object param) {
        return orgRepository.findRootAndLoadSubOrg();
    }
}

public class AllFormFieldModel {
    // ...
    @Field(title = "树状单选(后台获取数据)")
    @TreeLookup(value = OrgTreeLookupAction.class, labelField = "name", valueField = "id", childrenField = "subOrg")
    private Integer treeLookupSelect;
    // ...
}

多选

多选 Lookup 非常简单, 进需要将字段声明为集合 或者 数组类型即可, 例如:

java
public class AllFormFieldModel {
    // ...
    @Field(title = "多选(后台获取数据)")
    @Lookup(value = EmployeeLookupAction.class, labelField = "name", valueField = "id")
    private List<Integer> multipleLookupSelect;

    @Field(title = "树状多选(后台获取数据)")
    @TreeLookup(value = OrgTreeLookupAction.class, labelField = "name", valueField = "id", childrenField = "subOrg")
    private List<Integer> multipleTreeLookupSelect;
    // ...
}