以上两篇都只能显示有限的节点,如果想要在前台显示无限的节点,就需要用到递归了。这篇文章是基于上一篇的。
我的思路是:
先找出根节点
再递归根节点(递归结束的条件是:当此节点没有子节点时,结束递归)
1.数据库表设计和实体类和上一篇是一样的
2.看下DAO层和controller层
第一步:先取得根节点
public List getAllTree() {
String hql = "from TAcademy where pid=(select min(pid) from TAcademy)";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
return query.list();
}
第二步:遍历根节点
@RequestMapping("/__getAllTree")
public String __getAllTree(HttpServletRequest request,HttpServletResponse response)throws Exception{
List<TAcademy> tree = treeService.getAllTree();
List<TAcademy> allTree = digui(tree);
JSONArray jn = JSONArray.fromObject(allTree);
response.setContentType("text/html;charset=utf-8");
response.getWriter().println(jn.toString());
return null;
}
//递归形成专业树
public List digui(List<TAcademy> tree){
for (TAcademy academy : tree){
if(treeService.getAcademyByPid(academy.getId())!=null){
List<TAcademy> _tree = treeService.getAcademyByPid(academy.getId());
academy.setChildren(_tree);
digui(_tree);
}
}
return tree;
}
注意:其实不应该把数据库表中id设置问auto,如果设置成auto,那么就会在插入节点的时候出现问题。所以就在数据库中再增加一个字段。