extjs 树总结(logic层)
2011-02-22 17:00
148 查看
分两种情况写:
1.每次都去数据库查询:
首先要取得树的根节点、每次走后台的时候根据选中的nodeId去查询它的子节点
在ExplorerTreeNodeDto中定义了一个List < ExplorerTreeNodeDto > children的属性用来定义子节点
public List < ExplorerTreeNodeDto > loadTree(id) {
// 判断取得根节点还是叶子节点
if (folderId.substring(0, 4).equals(ConstantsManager.PREFIX_FOLDER_ID)) {
// 取得叶子节点的情况
return getTreeNode(id);
} else {
// 取得跟节点的情况
return getRootNode();
}
}
private List < ExplorerTreeNodeDto > getRootNode(final String fccid) {
FolderDao folderDao = getFolderDao();
// 取得根节点数据
List < ExplorerTreeNodeDto > lst = folderDao.getRootNode(fccid);
for (int i = 0; i < lst.size(); i++) {
ExplorerTreeNodeDto dto = lst.get(i);
// 业务中要求初始化的时候显示根节点及其下一层节点
dto.setChildren(folderDao.getTreeNode(dto.getId()));
// 因为DTO中定义的leaf类型是String的,在这里给转化成布尔型的,这样在extjs的树标签中就能自动判断是不是叶子节点
for (int j = 0; j < lst.get(i).getChildren().size(); j++) {
if ("TRUE".equals(dto.getChildren().get(j).getStrLeaf())) {
dto.getChildren().get(j).setLeaf(true);
} else {
dto.getChildren().get(j).setLeaf(false);
}
}
}
return dto;
}
private List < ExplorerTreeNodeDto > getTreeNode(final String folderId) {
FolderDao folderDao = getFolderDao();
List < ExplorerTreeNodeDto > lstDto;
// 取得树的叶子节点
lstDto = folderDao.getTreeNode(folderId);
// 转换leaf类型
for (int i = 0; i < lstDto.size(); i++) {
ExplorerTreeNodeDto dto = lstDto.get(i);
if ("TRUE".equals(dto.getStrLeaf())) {
dto.setLeaf(true);
} else {
dto.setLeaf(false);
}
}
return lstDto;
}
2.只读取一次数据库,取得所有的数据,不再访问数据库
public List < ExplorerTreeNodeDto > loadTreeAll(final String fccId,
final String serviceId, final String subId, final String linkId) {
FolderDao folderDao = getFolderDao();
// 取得根节点数据
List < ExplorerTreeNodeDto > lst = folderDao.getRootNode(fccId);
// 递归读取根节点的子节点
return getTreeNodeRecursive(lst);
}
private List < ExplorerTreeNodeDto > getTreeNodeRecursive(
List < ExplorerTreeNodeDto > lstDto) {
FolderDao folderDao = getFolderDao();
for (int i = 0; i < lstDto.size(); i++) {
ExplorerTreeNodeDto dto = lstDto.get(i);
dto.setChildren(folderDao.getTreeNode(dto.getId()));
if ("TRUE".equals(dto.getStrLeaf())) {
dto.setLeaf(true);
} else {
dto.setLeaf(false);
}
// 递归取得子节点
if (dto.getChildren() != null) {
getTreeNodeRecursive(dto.getChildren());
}
}
return lstDto;
}
1.每次都去数据库查询:
首先要取得树的根节点、每次走后台的时候根据选中的nodeId去查询它的子节点
在ExplorerTreeNodeDto中定义了一个List < ExplorerTreeNodeDto > children的属性用来定义子节点
public List < ExplorerTreeNodeDto > loadTree(id) {
// 判断取得根节点还是叶子节点
if (folderId.substring(0, 4).equals(ConstantsManager.PREFIX_FOLDER_ID)) {
// 取得叶子节点的情况
return getTreeNode(id);
} else {
// 取得跟节点的情况
return getRootNode();
}
}
private List < ExplorerTreeNodeDto > getRootNode(final String fccid) {
FolderDao folderDao = getFolderDao();
// 取得根节点数据
List < ExplorerTreeNodeDto > lst = folderDao.getRootNode(fccid);
for (int i = 0; i < lst.size(); i++) {
ExplorerTreeNodeDto dto = lst.get(i);
// 业务中要求初始化的时候显示根节点及其下一层节点
dto.setChildren(folderDao.getTreeNode(dto.getId()));
// 因为DTO中定义的leaf类型是String的,在这里给转化成布尔型的,这样在extjs的树标签中就能自动判断是不是叶子节点
for (int j = 0; j < lst.get(i).getChildren().size(); j++) {
if ("TRUE".equals(dto.getChildren().get(j).getStrLeaf())) {
dto.getChildren().get(j).setLeaf(true);
} else {
dto.getChildren().get(j).setLeaf(false);
}
}
}
return dto;
}
private List < ExplorerTreeNodeDto > getTreeNode(final String folderId) {
FolderDao folderDao = getFolderDao();
List < ExplorerTreeNodeDto > lstDto;
// 取得树的叶子节点
lstDto = folderDao.getTreeNode(folderId);
// 转换leaf类型
for (int i = 0; i < lstDto.size(); i++) {
ExplorerTreeNodeDto dto = lstDto.get(i);
if ("TRUE".equals(dto.getStrLeaf())) {
dto.setLeaf(true);
} else {
dto.setLeaf(false);
}
}
return lstDto;
}
2.只读取一次数据库,取得所有的数据,不再访问数据库
public List < ExplorerTreeNodeDto > loadTreeAll(final String fccId,
final String serviceId, final String subId, final String linkId) {
FolderDao folderDao = getFolderDao();
// 取得根节点数据
List < ExplorerTreeNodeDto > lst = folderDao.getRootNode(fccId);
// 递归读取根节点的子节点
return getTreeNodeRecursive(lst);
}
private List < ExplorerTreeNodeDto > getTreeNodeRecursive(
List < ExplorerTreeNodeDto > lstDto) {
FolderDao folderDao = getFolderDao();
for (int i = 0; i < lstDto.size(); i++) {
ExplorerTreeNodeDto dto = lstDto.get(i);
dto.setChildren(folderDao.getTreeNode(dto.getId()));
if ("TRUE".equals(dto.getStrLeaf())) {
dto.setLeaf(true);
} else {
dto.setLeaf(false);
}
// 递归取得子节点
if (dto.getChildren() != null) {
getTreeNodeRecursive(dto.getChildren());
}
}
return lstDto;
}
相关文章推荐
- ExtJs使用总结
- Extjs 学习总结-Ext.define自定义类
- Extjs整体总结
- Extjs学习总结之感想
- EXTJS项目实战经验总结一:日期组件的change事件:
- Extjs下拉树代码测试总结
- ExtJs开发总结
- ExtJs常用方法总结
- ExtJS 给textfield赋值的方法总结
- extJs 2.0学习笔记(事件注册总结篇) 转载
- Extjs 中的添加事件总结
- Extjs使用技巧总结
- extjs+amcharts生成3D柱状图和数据表格使用总结
- extjs 小总结
- 2017-12-05 Xilinx U471-IOB文档学习&总结(3):ILOGIC/OLOGIC Resources
- ExtJS 开发总结
- ExtJS 学习总结 (二)-- 项目实例
- ExtJS 4.*基础概念总结(基于Ext4.2.1)
- ExtJS学习笔记 layout的9种样式风格总结(转)
- EXTJS与后台(J2EE)实战开发经验与心得总结。