部门关系ExtJs树的实现
- 格式:docx
- 大小:45.94 KB
- 文档页数:16
通常我们利用ext树显示部门信息的时候,需要显示部门的关联关系或者是上下级关系,那么,我们就需要传给ext树固定格式的json,下面我们就进行json的拼装。
首先我们假定A部门是B部门的上级部门 我们利用面向对象的原理创建一个简单的树节点对象,如下:
package pojo; /** * ext树节点 * * @author huang * */ public class StoreTreeNode {
private String id; private Boolean leaf = false; private String text; private String parentId; private Boolean expended = false; private Boolean checked = false; public String getId() { return id; }
public void setId(String id) { this.id = id; }
public Boolean getLeaf() { return leaf; }
public void setLeaf(Boolean leaf) { this.leaf = leaf; } public String getParentId() { return parentId; }
public void setParentId(String parentId) { this.parentId = parentId; }
public String getText() { return text; }
public void setText(String text) { this.text = text; }
public Boolean getExpended() { return expended; }
public void setExpended(Boolean expended) { this.expended = expended; }
public Boolean getChecked() { return checked; }
public void setChecked(Boolean checked) { this.checked = checked; }
}
接着创建一个节点的封装类: package pojo; import java.util.HashSet; import java.util.Set;
/** * 节点对象封装 * * @author huang * */ public class StoreTreeNodeOM {
private Set set = new HashSet(); private StoreTreeNode node; public StoreTreeNodeOM(Set set, StoreTreeNode node) { this.set = set; this.node = node; }
public StoreTreeNodeOM(StoreTreeNode node) { this.node = node; }
public StoreTreeNodeOM() { }
public String id() { return this.node.getId(); }
/** * 根据id返回子节点 * * @param id * @return */ public StoreTreeNode getChildNode(String id) { StoreTreeNode s = null; if (set.size() > 0) { for (StoreTreeNodeOM om : set) { if (om.id().equals(id)) { s = om.getNode(); } } } return s; }
/** * 添加子节点 * * @param om */ public void insertChild(StoreTreeNodeOM om) { this.set.add(om); }
public Set getSet() { return set; }
public void setSet(Set set) { this.set = set; }
public StoreTreeNode getNode() { return node; }
public void setNode(StoreTreeNode node) { this.node = node; }
}
节点的封装类含有当前的节点信息以及子节点信息。 下面是如何将所有的对象都转换为节点树:
package utils; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.HashSet; import java.util.Set;
import net.sf.json.JSONArray; import net.sf.json.JSONObject; import pojo.StoreTreeNode; import pojo.StoreTreeNodeOM; import annotation.NodeId; import annotation.NodeText; /** * ext树工具 * * @author huang * */ public class StoreUtil {
/** * 对象转换为Ext树节点 * * @param object * @return */ public static StoreTreeNode objectToStoreTree_child(Object object, Object parent, Boolean inhert) {
StoreTreeNode storeTreeNode = new StoreTreeNode(); try { storeTreeNode.setText((String) EntityUtil.fieldValue(object, NodeText.class, inhert)); storeTreeNode.setId((String) EntityUtil.fieldValue(object, NodeId.class, inhert)); if (parent != null) { storeTreeNode.setParentId((String) EntityUtil.fieldValue( parent, NodeId.class, inhert)); storeTreeNode.setLeaf(false); } } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } return storeTreeNode; }
/** * 查找所有父节点 * * @param nodes * @return */ public static Set parentStoreTreeNodes( Collection nodes) { Set set = new HashSet(); for (StoreTreeNode s : nodes) { String parentId = s.getParentId(); if (parentId != null) { for (StoreTreeNode n : nodes) { if (parentId.equals(n.getId())) { set.add(n); } } } } return set; }
/** * 获取子节点最多及深度最高的父节点 * * @param nodes * @return */ public static Set parentStoreTreeNodes_top( Collection nodes) { Set parents = parentStoreTreeNodes(nodes); if (parents.size() == 0) { return (Set) nodes; } else { return parentStoreTreeNodes_top(parents); } }
/** * 根据父节点返回所有子节点