文章描述
项目中经常使用到树形列表,树形结构数据都从服务器中拿取,服务器通过特定规则查询数据库封装树形结构数据,此时就需要考虑怎样写出一个最通用的方法封装数据。本人觉得我的这个方法应该可以满足所有树形结构的数据封装。在PC端,APP端已得到验证
思路
树形结构根据不同的条件需求找寻共通点,不管任何的业务需求,树形列表总要满足一下几个方面(不保证完全覆盖,欢迎大家完善):
1,树形节点的内容(title)
2, 树形节点id
3,树形节点关联id(我习惯叫它父id)
4,默认树形列表是否展开checked
5,子集 List
代码
一, 树形实体类
package com.yx.model.entity;
import java.util.List;
public class TreeModel {
private String title ; //tree名
private String value ; //id
private String pId ; //父级id
private String url ; //树形节点路径
private List<TreeModel> data ; //子集合
private String id ;
private String name ;
private boolean checked ;
private String status; //状态 (0:启用,1:禁用)
private String codeUrl; // 编码URL
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public String getpId() {
return pId;
}
public void setpId(String pId) {
this.pId = pId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public List<TreeModel> getData() {
return data;
}
public void setData(List<TreeModel> data) {
this.data = data;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status == null ? null : status.trim();
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getCodeUrl() {
return codeUrl;
}
public void setCodeUrl(String codeUrl) {
this.codeUrl = codeUrl;
}
@Override
public String toString() {
return "TreeModel{" +
"title='" + title + '\'' +
", value='" + value + '\'' +
", pId='" + pId + '\'' +
", url='" + url + '\'' +
", data=" + data +
", id='" + id + '\'' +
", name='" + name + '\'' +
", checked=" + checked +
", status='" + status + '\'' +
", codeUrl='" + codeUrl + '\'' +
'}';
}
}
二,封装数据
public Object innerDeptTree() {
QxGroup group = new QxGroup()`;`
group.setDeletedFlag(DeletedFlag.NO.getFlag());
// queryAdminQx(group, DataType.Group);// 管理员权限组
List<QxGroup> gList = groupService.queryListByWhere(group);
// 转为TreeModel格式
List<TreeModel> tList = new ArrayList<TreeModel>();
if(gList!=null&&gList.size()>0){
for (QxGroup qxGroup : gList) {
TreeModel tm = new TreeModel();
tm.setTitle(qxGroup.getName());
tm.setValue(qxGroup.getGid());
tm.setpId(qxGroup.getParentid());
tm.setId(qxGroup.getGid());
tm.setName(qxGroup.getName());
tm.setChecked(true);
tm.setStatus(qxGroup.getStatus());
tList.add(tm);
}
for (int a=0;a<tList.size();a++){
TreeModel treeModel=tList.get(a);
for (int b=0;b<tList.size();b++){
if(Objects.equals(treeModel.getId(),tList.get(b).getpId())){
int d=0;
for (int c=0;c<tList.size();c++){
if(Objects.equals(tList.get(c).getpId(),tList.get(b).getId())){
d++;
}
}
List<TreeModel> data = treeModel.getData()==null?new ArrayList<>():treeModel.getData();
if(d>0){
Map<String,Object> map=new HashMap<>();
map.put("flag",true);