个人笔记-jquery 树形下拉框,赋前后台代码

JSP代码:

<script type="text/javascript" src="../jquery-1.4.4.js"></script>
<script type="text/javascript" src="../jquery.easyui.min.js"></script>
<link rel="stylesheet" type="text/css" href="../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../easyui.css">

<script type="text/javascript">
$(function(){//页面加载时调用方法3
  $('#cc').combotree('loadData', [{id:1,text:'City',children:[{id:11,text:'Wyoming',children:[{id:111,text:'Albin'},{id:112,text:'Canon'},{id:113,text:'Egbert'}]},{id:11,text:'Wyoming',state:'closed',children:[{id:121,text:'Bellingham'},{id:122,text:'Chehalis'},{id:123,text:'Ellensburg'},{id:124,text:'Monroe'}]}]}]);
});

</script>

<body>
 <h2>ComboTree Actions</h2>
 <p>Click the buttons below to perform actions</p>
 <div style="margin:20px 0">
  <a href="javascript:void(0)" class="easyui-linkbutton" οnclick="getValue()">GetValue</a>
  <a href="javascript:void(0)" class="easyui-linkbutton" οnclick="setValue()">SetValue</a>
  <a href="javascript:void(0)" class="easyui-linkbutton" οnclick="disable()">Disable</a>
  <a href="javascript:void(0)" class="easyui-linkbutton" οnclick="enable()">Enable</a>
 </div>
 
 <input id="cc" style="width:200px;">
 <script type="text/javascript">
  $('#cc').combotree( {  
      //选择树节点触发事件 
      onSelect : function(node) { 
          //返回树对象 
          var tree = $(this).tree; 
          //选中的节点是否为叶子节点,如果不是叶子节点,清除选中 
          var isLeaf = tree('isLeaf', node.target); 
          if (!isLeaf) { 
              //清除选中 
              $('#cc').combotree('clear');
              alert("该节点不可被选中")
          } 
      } 
  });
  function getValue(){
   var val = $('#cc').combotree('getValue');
   alert(val);
  }
  function setValue(){
   $('#cc').combotree('setValue', '122');
  }
  function disable(){
   $('#cc').combotree('disable');
  }
  function enable(){
   $('#cc').combotree('enable');
  }
 </script>

 

后台代码:

1.TreeEntity类:对应数据库表,要包含id,text,pid(父节点)
2.TreeModel类:自定义封装类,要转换成json数据的实体
3.TreeBuilder类:辅助类,转换上下级节点封装
 
action中调用:
String pid;根节点-需要传根节点参数
List<TreeEntity> treeEntities = 查询数据库返回的数据集;
TreeBuilder treeBuilder = new TreeBuilder(pid, treeEntities);
String     jsonStr =  treeBuilder.getJsonTree();//返回前台的jsonStr字符串,前台接收需要eval()转一下;
 
 
 
package com.sgepm.easywork.comm.bean;

import javax.persistence.Column;
import javax.persistence.Table;

@Table
public class TreeEntity implements java.io.Serializable {
	
	private static final long serialVersionUID = 1571960562503090861L;
	
	private String id;
	private String text;
	private String pid;
	
	public TreeEntity() {
		super();
	}
	
	@Column(name = "ID", nullable = false, length = 64)
	public String getId() {
		return id;
	}

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

	@Column(name = "TEXT", nullable = false, length = 64)
	public String getText() {
		return text;
	}

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

	@Column(name = "PID", nullable = false, length = 64)
	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}
	
}

import java.util.List;
import java.util.Map;

public class TreeModel {
	
	private String id;
	private String text;
	private List<TreeModel> children;
	
	public String getId() {
		return id;
	}
	
	public void setId(String id) {
		this.id = id;
	}
	
	public String getText() {
		return text;
	}
	
	public void setText(String text) {
		this.text = text;
	}
	
	public List<TreeModel> getChildren() {
		return children;
	}

	public void setChildren(List<TreeModel> children) {
		this.children = children;
	}
	
}

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.sf.json.JSONArray;
import com.sgepm.easywork.comm.bean.TreeEntity;
import com.sgepm.easywork.comm.bean.TreeModel;
/**
 * 辅助类,树形构建器
 * 
 * @author Nan
 *
 */
public class TreeBuilder {
	
	private String				pid;	//根节点id
	private List<TreeEntity> 	treeEntityList;	//树实体
    	
	public TreeBuilder(String pid,List<TreeEntity> treeEntityList) {					
		this.pid = pid;
		this.treeEntityList = treeEntityList;
	}
	
	/**
	 * 获得JSON树
	 * @return
	 */
	public String getJsonTree() {
		JSONArray treeJson = JSONArray.fromObject(bulidTreeModel());
		return treeJson.toString();
	}
	
	/**
	 * 构建树模型
	 * 
	 * @return
	 */
	public List<TreeModel> bulidTreeModel() {
		List<TreeModel> treeModels 	= new ArrayList<TreeModel>();
		TreeEntity root 			= getRoot();
		TreeModel treeModel 		= toTreeModel(root);
		this.buildChildModel(treeModel);
		treeModels.add(treeModel);
		return treeModels;
	}
	
	/**
	 * 递归查找子节点
	 * 
	 * @param pid
	 * @return
	 */
	private void buildChildModel(TreeModel treeModel) {
		List<TreeModel> childrenTreeModel 	= new ArrayList<TreeModel>();
		List<TreeEntity> childrenTreeEntity = this.getChildren(treeModel.getId());
		
		if (!childrenTreeEntity.isEmpty()) {
			for (TreeEntity treeEntity : childrenTreeEntity) {
				TreeModel model = toTreeModel(treeEntity);
				childrenTreeModel.add(model);
				buildChildModel(model);
			}
		}
		treeModel.setChildren(childrenTreeModel);
	}
	
	/**
	 * 转换成树模型
	 * 
	 * @param treeEntity
	 * @return
	 */
	private TreeModel toTreeModel(TreeEntity treeEntity) {
		TreeModel treeModel = new TreeModel();
		treeModel.setId(treeEntity.getId());
		treeModel.setText(treeEntity.getText());		
		return treeModel;
	}
	
	/**
	 * 获取根节点
	 * 
	 * @return
	 */
	private TreeEntity getRoot() {
		for (TreeEntity treeEntity : treeEntityList) {
			if (treeEntity.getId().equals(pid)) {
				return treeEntity;
			}
		}
		return null;
	}

	/**
	 * 获取全部子节点
	 * 
	 * @return
	 */
	private List<TreeEntity> getChildren(String pid) {
		List<TreeEntity> childOrgList = new ArrayList<TreeEntity>();
		for (TreeEntity treeEntity : treeEntityList) {
			if (treeEntity.getPid().equals(pid)) {
				childOrgList.add(treeEntity);
			}
		}
		return childOrgList;
	}

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值