easyui 下拉选择树(ComboTree) 的实现


很多时候都会用到下拉框,有时候为了显示更好的效果,会用到树型下拉框,实际就是下拉框中带了一个树型的控件,所以它自然继承自treecombobox.

: 前台:

1. 首先从前台来讲, 先把html元素写好

<select id="cc" value="01" style="width:200px;" ></select>
<a href="#" id="btn" class="easyui-linkbutton" οnclick="getValue()">getValue</a>

这里用js加载方式:

$('#cc').combotree({
    url:'tree_data.json',
});

这里的url是跟html统一文件夹下的一个json格式文件.是一个模拟的json数据.大致结构如下:

<p>[{</p><p>	id: 1,</p><p>	text: 'Languages',</p><p>	children: [{</p><p>		id: 11,</p><p>		text: 'Java'</p><p>	},{</p><p>		id: 12,</p><p>		text: 'C++'</p><p>	}]</p><p>}] </p>

一个简单基础的下拉树就形成了:



在下拉树旁边写了一个按钮, 这个按钮有一个普通的onclick事件,就是获取下拉树的选择的值.代码如下:

function getValue(){
	var value = $('#cc').combotree('getValue');
	alert(value);
}

还有下拉树实现多选: 实际就是加了个multiple属性,代码如下

$('#ccm').combotree({
	url:'tree_data.json',
	multiple: true,
	//cascadeCheck: false
	//onlyLeafCheck: true
});

如果要获取它选择的值只需要把前面呢个getValue换成getValues

var value = $('#ccm').combotree('getValues'); //会返回id值的数组,逗号连接

这种方式getValues默认是级联的,也就是选择子节点,他的父节点也可能get,所以有一个属性cascadeCheck.

cascadeCheck定义是否层叠选中状态,也就是前面的小方框会不会自动级联,如图变成false就是不级联,但是这样很怪.

onlyLeafCheck定义是否只在末级节点之前显示复选框,也就是只有子节点才会有复选框,也就是只能选择叶子节点,没什么级联了.


:数据

假如下拉树是要选择班级下的学生信息, 那么随便造个数据.


:后台

既然前台的url接收是一个json格式的东西.可以看到这里面有三个关键属性, id, text, children.三者缺一不可.

那数据中的两个表在程序中的persistence层对应着两个实体. Entity ClassEntity Student.

除此之外,还需要一个Model.

public class ComboTreeModel {
	private String id;
	private String text;
	private List<ComboTreeModel> children;
	
//setter and getter
}

而最后传给url,应该是json格式的:

下面就是通过业务关联, 将两个实体组合,查出需要数据,放到Model模型.

@RequestMapping(value="/getSelectData")
@ResponseBody
public List<ComboTreeModel> getTreeData(HttpServletRequest request, HttpServletResponse response,ComboTreeModel treeModel){
	List classList = this.studentService.queryClassList();
	//[{eventid:"c001",classname:'奥赛班',eventid:"c002",classname:'直播班',eventid:"c003",classname:'火箭班'}]
	List<ComboTreeModel> list = new ArrayList<ComboTreeModel>();
	for(int i=0; i<classList.size(); i++){
		ComboTreeModel model = new ComboTreeModel();
		Map classMap = (Map) classList.get(i);
		//{eventid:"c001",classname:'奥赛班'}
		String classId = (String) classMap.get("eventid");
		String className = (String)classMap.get("classname");
		model.setId(classId); 
		model.setText(className);
		List studentList = this.studentService.queryByClassId(classId);
		
		if(studentList.size() > 0){
			List<ComboTreeModel> childrenList = new ArrayList<ComboTreeModel>();
			for(int j = 0;j<studentList.size();j++){
				ComboTreeModel model2 = new ComboTreeModel();
				Map studentMap = (Map)studentList.get(j);
				String studentEventId = (String) studentMap.get("eventid");
				String studentName = (String) studentMap.get("studentname");
				model2.setId(studentEventId);
				model2.setText(studentName);
				childrenList.add(model2);
			}
			model.setChildren(childrenList);
		}
		list.add(model); 
	}
	return list;
}
ResponseBody 会自动返回JSON格式的数据.



  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值