效果图
--自定义tree实体
package com.easyui.domin;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义自己拼接的树需要的属性
* @author Administrator
*
*/
public class VehicleTree {
private String id;
private String pid;
private String state;//用来设置是否默认展开根节点 state:节点状态,'open' 或 'closed'。
private String iconCls;//设置图片
private String text;//设置显示的内容
private boolean checked;
private String attributes;
private List<Object> children=new ArrayList<Object>();
public List<Object> getChildren() {
return children;
}
public void setChildren(List<Object> children) {
this.children = children;
}
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 getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getIconCls() {
return iconCls;
}
public void setIconCls(String iconCls) {
this.iconCls = iconCls;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public String getAttributes() {
return attributes;
}
public void setAttributes(String attributes) {
this.attributes = attributes;
}
}
--生成树的核心的处理方法
package com.easyui.service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
import com.easyui.db.ConnectionPool;
import com.easyui.domin.VehicleTree;
/**
* JqueryEasyUI后台生成整棵树
* 背景:生成车队和车的树
* 车队相当于根 车辆相当于叶子
* 效果:
* 根车队
* ---第一子车队
* ---第一子车队下的车车队
* ---第一子车队下的车车队对应的车辆
* ---第一子车队下的车辆
* ---第二子车队
* ---第二子车队下的车车队
* ---第二子车队下的车车队对应的车辆
* ---第二子车队下的车辆
*
* @author Administrator
*
*/
public class TreeService {
private ConnectionPool cp=ConnectionPool.getInstance();
//拼接树结构
public List<VehicleTree> getVehicleTree() throws Exception{
Connection con=cp.getConnection();
Statement sts=con.createStatement();
//获取树的根
String sql="SELECT A.VEHICLE_GROUP_ID AS \"id\", "+
" A.VEHICLE_GROUP_NAME AS \"text\", "+
" A.PARENT_VEHICLE_GROUP_ID AS \"pid\" "+
" FROM VEHICLE_GROUP_T A "+
" WHERE A.VEHICLE_GROUP_ID=1 AND A.DELETE_FLAG != 1 "+
" AND A.TENANT_ID =1";
ResultSet rs=sts.executeQuery(sql.toString());
cp.releaseConnection(con);
List<VehicleTree> treeList=new ArrayList<VehicleTree>();
while(rs.next()){
VehicleTree vTree=new VehicleTree();
vTree.setText(rs.getString("text"));
vTree.setId(rs.getString("id"));
vTree.setPid(rs.getString("pid"));
treeList.add(vTree);
}
List<VehicleTree> trees = new ArrayList<VehicleTree>();
if(treeList!=null && treeList.size()>0){
for(int i=0;i<treeList.size();i++){
VehicleTree vTree=getChildren(treeList.get(i));//不在children集合里面直接放list集合是因为拼接JSON的需要
vTree.setState("closed");//默认根是收缩的
trees.add(vTree);
}
}
return trees;
}
//递归获取子车队和挂车辆
public VehicleTree getChildren(VehicleTree vTree) throws Exception{
if(vTree==null){
return null;
}
//挂车
List<VehicleTree> vehicle=this.getVehicle(vTree.getId());
if(vehicle!=null && vehicle.size()>0){
for(int i=0;i<vehicle.size();i++){
vTree.getChildren().add(vehicle.get(i));
}
}
//挂子车队
List<VehicleTree> vehicleGroup=this.getVehicleGroup(vTree.getId());
if(vehicleGroup!=null && vehicleGroup.size()>0){//说明有子车队
vTree.setState("closed");//有子车队时设置默认树收缩
for(int i=0;i<vehicleGroup.size();i++){
VehicleTree childVehicleGroup=getChildren(vehicleGroup.get(i));//递归
if(childVehicleGroup!=null){
vTree.getChildren().add(vehicleGroup.get(i));//给这个节点挂子节点
}
}
}
return vTree;
}
//获取车队数据
public List<VehicleTree> getVehicleGroup(String vehicleGroupId) throws Exception{
Connection con=cp.getConnection();
Statement sts=con.createStatement();
String sql="SELECT A.VEHICLE_GROUP_ID AS \"id\", "+
" A.VEHICLE_GROUP_NAME AS \"text\", "+
" A.PARENT_VEHICLE_GROUP_ID AS \"pid\" "+
" FROM VEHICLE_GROUP_T A "+
" WHERE A.PARENT_VEHICLE_GROUP_ID="+vehicleGroupId+" AND A.DELETE_FLAG != 1 "+
" AND A.TENANT_ID =1";
ResultSet rs=sts.executeQuery(sql.toString());
cp.releaseConnection(con);
List<VehicleTree> treeList=new ArrayList<VehicleTree>();
while(rs.next()){
VehicleTree vTree=new VehicleTree();
vTree.setText(rs.getString("text"));
vTree.setId(rs.getString("id"));
vTree.setPid(rs.getString("pid"));
treeList.add(vTree);
}
return treeList;
}
//获取车辆数据
public List<VehicleTree> getVehicle(String vehicleGroupId) throws Exception{
Connection con=cp.getConnection();
Statement sts=con.createStatement();
String sql="SELECT A.VEHICLE_ID AS \"id\", "+
" A.ADMIN_CODE AS \"text\", "+
" A.VEHICLE_GROUP_ID AS \"pid\" "+
" FROM VEHICLE_T A "+
" WHERE A.VEHICLE_GROUP_ID="+vehicleGroupId+" AND A.DELETE_FLAG != 1 "+
" AND A.TENANT_ID =1";
ResultSet rs=sts.executeQuery(sql.toString());
cp.releaseConnection(con);
List<VehicleTree> treeList=new ArrayList<VehicleTree>();
while(rs.next()){
VehicleTree vTree=new VehicleTree();
vTree.setText(rs.getString("text"));
vTree.setId(rs.getString("id"));
vTree.setPid(rs.getString("pid"));
treeList.add(vTree);
}
return treeList;
}
public static void main(String[] args) throws Exception {
TreeService tService=new TreeService();
List<VehicleTree> list=tService.getVehicleTree();
String str=JSONArray.fromObject(list).toString();
System.out.println(str);
}
}
--jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../head.jsp"></jsp:include>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
$(function(){
$("#t").tree({
url:'tree02.json',
checkbox: true,
lines:true,
onContextMenu:function(e, node){
//alert(node);
var leafs=$("#t").tree('isLeaf', node.target);//可以通过判断是否为叶子节点来决定是否开启菜单
console.log(leafs);
if(leafs){
e.preventDefault();
$('#mm').menu('show', {
left: e.pageX,
top: e.pageY
});
}
}
});
});
function menuHandler(item){
var node=$('#t').tree('getSelected');//获取选中的节点
var roots=$('#t').tree('getRoot');//获取选中的节点
}
</script>
<body>
<ul id="t"></ul>
<div id="mm" class="easyui-menu" data-options="onClick:menuHandler" style="width:120px;">
<div data-options="iconCls:'icon-add'">追加</div>
<div data-options="iconCls:'icon-remove'">移除</div>
</div>
</body>
</html>