现在的位置: 首页 > 综合 > 正文

经过整理的Extjs的json树的实现代码

2018年02月14日 ⁄ 综合 ⁄ 共 5906字 ⁄ 字号 评论关闭

1。extjs node 节点类

package com.jijiags.jesen.ExtjsTree;

/*******************************************************************************
 * <code>Node</code>类存储ExtjsTree的节点信息.
 * <p>节点信息包括:
 * id:存储节点的id值.
 * parentId:存储节点的父id值.注:当节点的parentId是0时表示该节点为根节点.
 * text:节点的名称.
 * checked:权限树的节点权限.
 *
 * @author jesen
 * @version 1.0,2009-5-12
 * @see ExtjsTree
 */
public class Node {
 
 /**  树节点的id */
 private int id;
 
 /**
  * 树节点的父id
  */
 private int parentId;
 private String text = "";
 /**
  * 权限树的权限节点选中属性
   */
 private Boolean checked = null;

 Node() {
 }

 /**
  * 构造extjs标准树和菜单树的节点.
  *
  * @param id
  * @param parentId
  * @param text
  */
 public Node(int id, int parentId, String text) {
  this.id = id;
  this.parentId = parentId;
  this.text = text;
 }

 /**
  * 构造extjs权限树的节点.
  *
  * @param id
  * @param parentId
  * @param text
  * @param checked
  */
 public Node(int id, int parentId, String text, boolean checked) {
  this.id = id;
  this.parentId = parentId;
  this.text = text;
  this.checked = checked;
 }

 public Boolean getChecked() {
  return checked;
 }

 public void setChecked(Boolean checked) {
  this.checked = checked;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public int getParentId() {
  return parentId;
 }

 public void setParentId(int parentId) {
  this.parentId = parentId;
 }

 public String getText() {
  return text;
 }

 public void setText(String text) {
  this.text = text;
 }

}

 

2.etjs树实现类

package com.jijiags.jesen.ExtjsTree;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * ExtjsTree类:根据数据库中的权限表生成extjs动态树所需的josntree字符串. <br>
 * ExtjsTree类:提供了生成三种Extjs树的字符串. <br>
 * 1:标准的josntree字符串. <br>
 * 2:生成权限树的josntree字符串.注:权限树的叶子节点是带有checkbox框的具体权限. <br>
 * 3:根据具体的叶子节点权限列表,生成叶子节点的父节点树的jonstree字符串.这个jonstree字符串也就功能Tree列表.
 *
 * @author jesen
 * @version 1.0 2009-5-12
 */
public class ExtjsTree {
 /***************************************************************************
  * 生成jonstree字符串缓存区
  */
 private StringBuffer returnStr = new StringBuffer();

 /**
  * 具有权限的叶子树列表
  */
 private List leafList = new ArrayList();
 /**
  * 根据叶子节点所生成的菜单树列表
  */
 private List menuListTree = new ArrayList();

 /**
  * 生成标准的josntree列表
  */
 private List treeList = new ArrayList();

 /**
  * 是否是权限树的标志,当标志树为true时,生成权限树.注:把所有的叶子节点上加上checkbox对话框.
  */
 private boolean isAuthorityTree = false;

 /**
  * 根据这个跟节点生成树.
  */
 private Node root = null;

 /**
  * 构造一个标准树或一个权限树的实例.
  *
  * @param root
  *            Node 树的根节点.根据这个根节点从treeList列表中生成树.
  * @param treeList
  *            List 树列表,来自数据库的权限表.
  */
 public ExtjsTree(Node root, List treeList) {// 构造方法里初始化模拟List
  this.root = root;
  this.treeList = treeList;
 }

 /***************************************************************************
  * 构造一个根据叶子权限节点列表,生成的树的实例.
  *
  * @param root
  *            Node 树的根节点.根据这个根节点从treeList列表中生成树.
  * @param leafList
  *            List 叶子节点的列表.来自数据库中的权限表.
  * @param treeList
  *            List 树列表,来自数据库的权限树表.
  */
 public ExtjsTree(Node root, List leafList, List treeList) {
  this.root = root;
  this.leafList = leafList;
  this.treeList = treeList;

 }

 /**
  * 判断该节点是否有子节点
  *
  * @param node
  * @return 有子节点放回true.
  */
 public boolean hasChild(Node node) {
  return getChildList(node).size() > 0 ? true : false;
 }

 /**
  * 获取该节点的子节点列表.
  *
  * @param node
  * @return 返回子节点列表.
  */
 public List getChildList(Node node) {
  List li = new ArrayList();
  Iterator it = this.treeList.iterator();
  while (it.hasNext()) {
   Node n = (Node) it.next();
   if (n.getParentId() == node.getId()) {
    li.add(n);
   }
  }
  return li;
 }

 /**
  * 更具该节点的父节点id 获取父节点对象.
  *
  * @param pid
  * @return 返回父节点对象.
  */
 public Node getParentNode(int pid) {
  Node pNode = null;
  Iterator it = this.treeList.iterator();
  while (it.hasNext()) {
   Node n = (Node) it.next();
   if (pid == 0) {
    break;
   }
   if (pid == n.getId()) {
    pNode = n;
    break;
   }
  }
  return pNode;
 }

 /**
  * 用递归方法计算出该节点的所有子节点.(如果this.isAuthorityTree ==
  * ture生成权限树字符串,在叶子节点上加上checkbox选项框)
  *
  * @param node
  */
 public void recursionAllSubNodeFn(Node node) {
  if (hasChild(node)) {
   returnStr.append("{id:");
   returnStr.append(node.getId());
   returnStr.append(",parentId:");
   returnStr.append(node.getParentId());
   returnStr.append(",text:");
   returnStr.append("/"" + node.getText() + "/"");
   returnStr.append(",expanded:true");
   returnStr.append(",children:[");
   List childList = getChildList(node);
   Iterator it = childList.iterator();
   while (it.hasNext()) {
    Node n = (Node) it.next();
    recursionAllSubNodeFn(n);
   }
   returnStr.append("]},");
  } else {
   returnStr.append("{id:");
   returnStr.append(node.getId());
   returnStr.append(",parentId:");
   returnStr.append(node.getParentId());
   returnStr.append(",text:");
   returnStr.append("/"" + node.getText() + "/"");
   if (isAuthorityTree && node.getId() != 1) {
    returnStr.append(",checked:");
    returnStr.append(node.getChecked());
   }
   returnStr.append(",leaf:true},");
  }

 }

 /**
  * 用递归方法计算出该叶子节点的父节点树.并把这些父节点添加到父节点树中(this.menuTreeList).
  *
  * @param node
  */
 public void recursionAllPNodeFn(Node node) {
  node = this.getParentNode(node.getParentId());
  if (node == null) {
   return;
  }

  if (this.menuListTree.contains(node)) {
   return;
  }
  this.menuListTree.add(node);
  recursionAllPNodeFn(node);

 }

 /**
  * 修饰一下才能满足Extjs的Json格式.
  *
  * @param returnStr
  *            用递归方法生成的jonstree字符串.
  * @return 返回满足Extjs动态树的Json格式字符串.
  */
 public String modifyStr(String returnStr) {
  return ("[" + returnStr + "]").replaceAll(",]", "]");

 }

 /**
  * 根据叶子节点权限列表生成菜单树.
  *
  * @param leafList
  * @return 返回一个菜单树列表.
  */
 public List getMenuTreeList(List leafList) {
  Iterator it = leafList.iterator();
  while (it.hasNext()) {
   Node node = (Node) it.next();
   this.recursionAllPNodeFn(node);
  }

  return this.menuListTree;
 }

 /**
  * 根据数据源生成标准的exjts 动态树字符串.
  *
  * @return 返回标准树字符串.
  */
 public String toJsonTree() {

  /*
   * ----测试数据---- Iterator it = this.treeList.iterator(); while
   * (it.hasNext()) { Node n = (Node) it.next();
   * System.out.println("nodeid" + n.getId() + " nodepid" +
   * n.getParentId()); } ----测试数据----
   */
  this.recursionAllSubNodeFn(this.root);
  return this.modifyStr(this.returnStr.toString());
 }

 /**
  * 根据数据源生成具有权限的exjts 动态树字符串.
  *
  * @return 返回权限树字符串.
  */
 public String toJsonAuthoratyTree() {
  this.isAuthorityTree = true;
  return this.toJsonTree();
 }

 /**
  * 根据数据源和权限列表,生成extjs动态树的权限菜单字符串.
  *
  * @return 返回菜单列表字符串.
  */
 public String toJsonMenuTree() {
  this.treeList = this.getMenuTreeList(this.leafList);
  this.isAuthorityTree = false;
  return this.toJsonTree();
 }

}

抱歉!评论已关闭.