ZK 中的Tree可以实现递归调用,该方法可以实现无限级次的分类,如ERP中的物料分类,人力资源中的组织架构分级等.
1、数据库设计中一般如下:ID,NAME,parentid,level,其中parentid就是指上级的ID(parent--id)引用。
2、下面list就是第一层应查询出来的数据库列表,也是树的第一层数据。接下来就是创建列表的表头数据。
public Tree createTree(String name, List<?> list) {
Tree tree = new Tree();
tree.setHeight("500px");
Treecols treecols = new Treecols();
Treecol treecol = new Treecol(name);
treecol.setParent(treecols);
treecols.setParent(tree);
Treechildren firstChild = new Treechildren();
//下面语句中的方法就递归调用的主要实现方法
tree.appendChild(AddTreeItem(firstChild, list));
return tree;
}
3、递归实现方法
public Treechildren AddTreeItem(Treechildren child, List list) {
for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
//list数据转换为部门数据
Depart depart = (Depart) iter.next();
//通过部门ID获取下属部门列表数据
List<?> row = getCompentList(depart.getFid());
//创建树的行信息
Treeitem firstItem = new Treeitem();
firstItem.setValue(depart.getFid());
Treerow firstRow = new Treerow();
Treecell firstCell = new Treecell(depart.getFname());
firstCell.setParent(firstRow);
firstRow.setParent(firstItem);
firstItem.setParent(child);
//判断有下属部门,则创建第二层实现递归调用
if (row.size() > 0){
Treechildren secondchild = new Treechildren();
firstItem.appendChild(AddTreeItem(secondchild, row));
}
}
return child;
}
4、在你的页面上这现实就可以了,调用这个方法。
public void refshTree() {
unit_center.getChildren().clear();
String name = new String("所有单位");
unit_west.getChildren().clear();
unit_tree.getChildren().clear();
unit_tree = createTree(name, getDepartList());
unit_tree.setParent(unit_west);
}