EasyUI_tree根据数据库数据非迭代生成树形结构
我们经常要根据数据库表的结构,生成树形结构在页面显示;下面就是一个例子:
页面的tree组件采用的是EasyUI 的 Tree 组件。
数据库结构:
表名称: tDict
Id name parentid sortid valid
主键 名称 父ID 排序ID 是否可用
tDict 实体类中,父ID以 tDict 实体类表述,如下:
public class TDict{ // Fields private String id; private TDict tDict; private Integer sortid; private String valid; private String name; ……省略<Get & Set> }
要用到Hibernate的支持,以下是模型层的映射文件 hbm
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping default-lazy="false"> <class name="com.bzinfo.crm.model.TDict" table="T_DICT"> <id name="id" type="java.lang.String"> <column name="ID" length="50" /> <generator class="assigned" /> </id> <many-to-one name="tDict" class="com.bzinfo.crm.model.TDict" lazy="false"> <column name="PARENTID" length="50" /> </many-to-one> <property name="sortid" type="java.lang.Integer"> <column name="SORTID" precision="6" scale="0" /> </property> <property name="valid" type="java.lang.String"> <column name="VALID" length="1" /> </property> <property name="name" type="java.lang.String"> <column name="NAME" length="50" /> </property> </hibernate-mapping>
首先,建立数节点类:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TreeNode { privateString id; //要显示的子节点的ID privateString text; //要显示的子节点的 Text privateString iconCls; //节点的图标 privateString parentId; //父节点的ID privateList<TreeNode> children; //孩子节点的List publicTreeNode(){} publicTreeNode(String id, String text, String iconCls, String parentId, List<TreeNode>children) { super(); this.id= id; this.text= text; this.iconCls= iconCls; this.parentId= parentId; this.children= children; } publicString getId() { returnid; } publicvoid setId(String id) { this.id= id; } publicString getText() { returntext; } publicvoid setText(String text) { this.text= text; } publicString getIconCls() { returniconCls; } publicvoid setIconCls(String iconCls) { this.iconCls= iconCls; } publicString getParentId() returnparentId; } publicvoid setParentId(String parentId) { this.parentId= parentId; } publicList<TreeNode> getChildren() { returnchildren; } publicvoid setChildren(List<TreeNode> children) { this.children= children; } //添加孩子的方法 publicvoid addChild(TreeNode node){ if(this.children == null){ children= new ArrayList<TreeNode>(); children.add(node); }else{ children.add(node); } } }
下面是生成树的方法:
@SuppressWarnings("unchecked") public List fillTree(String tableName){ String hql = " from TDictt where valid='1' order by t.sortid "; List<TreeNode> list = new ArrayList<TreeNode>(); Map map = new HashMap<String, TreeNode>(); try { //拉出数据库的数据,放入list2中 ArrayList<TDict> list2 = (ArrayList<TDict>)this.find(hql); //将list2中的数据,转换成TreeNode类型,放入Map中备用 for (TDict tDict : list2) { TreeNode node = new TreeNode(); node.setId(tDict.getId()); node.setText(tDict.getName()); if(tDict.gettDict()!=null){ node.setParentId(tDict.gettDict().getId()); } map.put(tDict.getId(), node); } //遍历list2的数据,把每个节点加入他的父节点的孩子List for (TDict tDict : list2) { if(tDict.gettDict()!= null){ if(tDict.gettDict().getId() == null) { list.add((TreeNode)map.get(tDict.getId())); }else{ String pidString = tDict.gettDict().getId(); TreeNode pnode = (TreeNode)map.get(pidString); TreeNode cnode=(TreeNode)map.get(tDict.getId()); pnode.addChild(cnode); } }else{ list.add((TreeNode)map.get(tDict.getId())); } } }catch (Exception e) { // TODO: handleexception e.printStackTrace(); } return list; }
在页面显示的时候,把list转换成Json格式:
List treeSet = treeManagerImpl.fillTree(null); String treeString = gson.toJson(treeSet); session.setAttribute("tree", treeString);
在页面取Json数据,并显示:
<script type="text/javascript"> window.onload =function(){ tree = ${tree}; $('#tt').tree({ data:tree }); }; </script>
版权声明:本文为博主原创文章,未经博主允许不得转载。