您的位置:首页 > 产品设计 > UI/UE

EasyUI_tree根据数据库数据非迭代生成树形结构

2012-02-20 16:32 399 查看
我们经常要根据数据库表的结构,生成树形结构在页面显示;下面就是一个例子:

页面的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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: