1、TreeJson
package com.hyxt.data.box.util;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONObject;
/**
* easui中的tree_data.json数据,只能有一个root节点
* [{
* "id":1,
* "text":"Folder1",
* "iconCls":"icon-save",
* "children":[{
* "text":"File1",
* "checked":true
* }]
* }]
* 提供静态方法formatTree(List<TreeJson> list) 返回结果
* TreeJson.formatTree(treeJsonlist) ;
*
* @author huw
*/
public class TreeJson implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String id;
private String pid;
private String text;
private String iconCls;
private String state;
private String checked;
private JSONObject attributes = new JSONObject();
private List<TreeJson> children = new ArrayList<TreeJson>();
/**
* ***** setter and getter *********
*/
public static List<TreeJson> formatTree(List<TreeJson> list) {
TreeJson root = new TreeJson();
TreeJson node = new TreeJson();
List<TreeJson> treelist = new ArrayList<TreeJson>();// 拼凑好的json格式的数据
List<TreeJson> parentnodes = new ArrayList<TreeJson>();// parentnodes存放所有的父节点
int k=0;
//for (int k = 0; k < parentList.size(); k++) {
if (list != null && list.size() > 0) {
root = list.get(0);
//循环遍历oracle树查询的所有节点
for (int i = 1; i < list.size(); i++) {
node = list.get(i);
if (node.getPid().equals(root.getId())) {
//为tree root 增加子节点
parentnodes.add(node);
// node.setChecked("true");
root.getChildren().add(node);
} else {//获取root子节点的孩子节点
//node.setChecked("true");
getChildrenNodes(parentnodes, node);
parentnodes.add(node);
}
}
treelist.add(root);
}
// }
return treelist;
}
private static void getChildrenNodes(List<TreeJson> parentnodes, TreeJson node) {
//循环遍历所有父节点和node进行匹配,确定父子关系
for (int i = parentnodes.size() - 1; i >= 0; i--) {
TreeJson pnode = parentnodes.get(i);
//如果是父子关系,为父节点增加子节点,退出for循环
if (pnode.getId().equals(node.getPid())) {
//pnode.setState("closed");//关闭二级树
pnode.getChildren().add(node);
return;
} else {
//如果不是父子关系,删除父节点栈里当前的节点,
//继续此次循环,直到确定父子关系或不存在退出for循环
parentnodes.remove(i);
}
}
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getIconCls() {
return iconCls;
}
public void setIconCls(String iconCls) {
this.iconCls = iconCls;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getChecked() {
return checked;
}
public void setChecked(String checked) {
this.checked = checked;
}
public List<TreeJson> getChildren() {
return children;
}
public void setChildren(List<TreeJson> children) {
this.children = children;
}
}
2、用户页面
<script type="text/javascript">
$(function(){
$('#treeul').tree({
checkbox:true,
url:'<%=request.getContextPath()%>/manage/role/roleresourcedata?roleId='+${roleId},
onLoadSuccess:function(){
//绑定权限
$.ajax({
cache:false,
dataType:'text',
success:function(data){
var array = data.split(',');
for(var i=0;i<array.length;i++)
{
var node = $('#treeul').tree('find',array[i]);
$('#treeul').tree('check',node.target);
}
}
})
}
});
});
function getChecked(){
var nodes = $('#treeul').tree('getChecked');
var s = '';
for(var i=0; i<nodes.length; i++){
if (s != '') s += ',';
s += nodes[i].id;
}
$("#rightIds").val(s);
return true;
}
</script>
---------------------------
还可以这样写:
$(function(){
$('#treeul').tree({
checkbox:true,
url:'<%=request.getContextPath()%>/manage/role/roleresourcedata?roleId='+${roleId},
onLoadSuccess:function(){
//绑定权限
$.ajax({
url:'getId.aspx?id='+v,
cache:false,
dataType:'text',
success:function(data){
var array = data.split(',');
for(var i=0;i<array.length;i++)
{
var node = $('#treeul').tree('find',array[i]);
$('#treeul').tree('check',node.target);
}
}
})
}
});
});
<form id="resourceForm" name="resourceForm" action="<%=request.getContextPath()%>/manage/role/resourcesave">
<input type="hidden" id="roleId" name="roleId" value="${roleId}">
<input type="hidden" id="rightIds" name="rightIds" value="">
<div class="easyui-panel" style="padding:5px">
<ul id="treeul" style="height: 300px;" class="easyui-tree" <%--data-options="url:'<%=request.getContextPath()%>/manage/role/roleresourcedata?roleId='+${roleId},method:'get',animate:true,checkbox:true"--%>></ul>
</div>
3、后台JSON
@RequestMapping(value = "/roleresourcedata")
public
@ResponseBody
String roleresourcedata(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
String roleId=request.getParameter("roleId");
StringBuilder jsonString =new StringBuilder();
List<TreeJson> list = rightService.findAll(roleId);
List<TreeJson> treeJsonList = TreeJson.formatTree(list);
net.sf.json.JSONArray jsonArray = net.sf.json.JSONArray.fromObject(treeJsonList);
logger.info(" = ============== " +jsonArray.toString());
return jsonArray.toString();
}