数据选择(Lookup)
我们在业务操作过程很多时候需要选择数据, 常见的比如选择用户.
Fastball
对这种数据选择提供了高效的封装, 我们以最简单的选择员工为例了解一下 数据选择(Lookup)
的使用方式.
编写 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 基本一致, 差别是:
- 需实现的接口为
dev.fastball.core.component.TreeLookupAction
- 使用注解为:
@dev.fastball.core.annotation.TreeLookup
- 需要声明子字段:
@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;
// ...
}