效果:
前台代码,没什么好说的,照搬官方文档的。采用异步加载子节点的方式,展开一个节点时把这个节点的id传到后台,获取该节点的子节点。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
[{
"id": 1,
"text": "Node 1",
"state": "closed",
"children": [{
"id": 11,
"text": "Node 11"
},{
"id": 12,
"text": "Node 12"
}]
},{
"id": 2,
"text": "Node 2",
"state": "closed"
}]
其中的id、text、state和children都是tree中节点的属性。id是节点的编号,这个例子里使用的是数据库表的主键;text是节点上显示的文本;state是节点的状态,默认是打开;children是节点的子节点。为了符合tree的要求,我建立了一个TreeNode类来对应这些属性。
TreeNode类代码如下:
public class TreeNode {
private Integer id;//节点编号
private String text;//节点文本
private String state="closed";//节点状态
private List children=new ArrayList();//子节点集合
public TreeNode() {}
public TreeNode(Integer id, String text) {
this.id = id;
this.text = text;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
}
public class Privilege implements Serializable {
private static final long serialVersionUID = -104941301217905290L;
private Integer id;//权限编号
private String name;//权限名称
private Integer level;//权限层级
private Integer parentId=0;//上级权限
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
}
result
Action类代码:
package easyui.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import easyui.entity.Node;
import easyui.entity.Privilege;
import easyui.entity.User;
import easyui.util.TreeNode;
@SuppressWarnings("serial")
public class JsonAction extends BasAction{
private Map result=new HashMap();
public Map getResult() {
return result;
}
public void setResult(Map result) {
this.result = result;
}
public String getNodes(){
//声明一个变量储存前台传递的节点编号
int id=0;
//如果key为id的参数不为空
if(parameters.get("id")!=null){
//把key为id的参数的第一个值放在id中
id=Integer.parseInt(parameters.get("id")[0]);
}
//建立一个TreeNode类集合存放节点
List treeNodes=new ArrayList();
//查询上级权限编号等于id的权限
List privileges=sqlSession.selectList("selectByParentId", id);
//遍历查询结果
for(Privilege privilege:privileges){
//实例化TreeNode类对象
TreeNode treeNode=new TreeNode(privilege.getId(), privilege.getName());
//如果当前遍历到的权限没有下级权限
if(sqlSession.selectList("selectByParentId", privilege.getId()).size()<1){
//设置节点状态为打开
treeNode.setState("open");
}
//把节点放入集合中
treeNodes.add(treeNode);
}
result.put("treeNodes",treeNodes);
return SUCCESS;
}
}
{"treeNodes":[{"children":[],"id":1,"state":"closed","text":"系统管理"},{"children":[],"id":40,"state":"closed","text":"审批流转"},{"children":[],"id":41,"state":"closed","text":"实用工具"}]}
效果:
展开第一个节点时后台返回的数据:
{"treeNodes":[{"children":[],"id":4,"state":"closed","text":"部门管理"},{"children":[],"id":5,"state":"closed","text":"岗位管理"},{"children":[],"id":6,"state":"closed","text":"用户管理"}]}
效果: