1:方法一
<%--tree--%>
<ul id="myTree"></ul>
<script>
$(function(){
$('#myTree').tree({
url:"${path}/easyui/tree.do"
});
})
</script>
@Data
public class Tree {
private Integer id;
private String text;
private String state;
private String checked;
private String iconCls;
private Integer pid;
}
@Data
public class TreeVO extends Tree {
private List<TreeVO> children;
}
@ResponseBody
@RequestMapping("tree")
public List<TreeVO> tree(){
List<TreeVO> list =userService.treeList();
return list;
}
/**
* easyui动态tree
*
* 代码优化:递归
* 自己调用自己
*
*
* @return
*/
@Override
public List<TreeVO> treeList() {
//获取到根节点的数据
List<TreeVO> trees = userMapper.treeList(0);
//调用方法,加载子节点
getChildrenUtil(trees);
return trees;
}
public void getChildrenUtil(List<TreeVO> trees){//1、2、3
for (int i = 0; i < trees.size(); i++) {
TreeVO treeVO = trees.get(i);
List<TreeVO> treeVOS = userMapper.treeList(treeVO.getId());//获取到4、5
treeVO.setChildren(treeVOS);
//通过4、5加载子节点
getChildrenUtil(treeVOS);//去获取6、7
}
//return trees;
}
<select id="treeList" resultType="treeVO">
select * from t_tree where pid = #{pid}
</select>
方法二:
当state 为closed时,默认所有节点都是折叠的。
当点击展开按钮的时候,会自动发送一个请求。
默认会将该节点的id值传递到后台;
后台只需要通过id作为pid查询相对于的list集合数据。
/**
*
* defaultValue: 默认的值为0
* required:
* true:默认的,必须传递的参数
* false:不是必须传递的
* @param id
* @return
*/
@ResponseBody
@RequestMapping("tree2")
public List<TreeVO> tree2(@RequestParam(defaultValue = "0",required = false) int id){
List<TreeVO> list =userService.treeList2(id);
return list;
}