1、在页面中创建一个用于触发的文本
<input type="text" id="unit_v" name="unit_v"/>
2、编写json组装数据格式(主要是先生成父节点在生成子节点,代码查询我做了封装你们主要看for以内的就好了)
String id = request.getParameter("id");
List<Object> list = new ArrayList<Object>();
if(id.equals("1")){
//父节点
DBRowSet ds = ExecuteQuery.getQueryTable("0","SELECT CD_CODE,CD_CHINA FROM C_KEY WHERE LENGTH(CD_CODE)=4", false, new PageModel(-1,-1));
for(int i=0; i<ds.getRowCount(); i++){
Map<Object,Object> map = new HashMap<Object,Object>();
map.put("id", i);
map.put("unit", ds.getString(i, "CD_CODE"));
map.put("text", ds.getString(i, "CD_CHINA"));
map.put("state", "closed");
list.add(i, map);
}
}else{
//子节点
String unit = request.getParameter("unit");
String nid = request.getParameter("nid");
DBRowSet db = ExecuteQuery.getQueryTable("0","SELECT CD_CODE,CD_CHINA FROM C_KEY WHERE LENGTH(CD_CODE)=9 AND CD_CODE LIKE '"+unit+"%'", false, new PageModel(-1,-1));
for(int n=0; n<db.getRowCount(); n++){
Map<Object,Object> map = new HashMap<Object,Object>();
map.put("id",nid+""+n);//这里的nid是父节点的ID必须带过来不然无法选中
map.put("unit",db.getString(n, "CD_CODE"));
map.put("text",db.getString(n, "CD_CHINA"));
list.add(n, map);
}
}
JSONArray json = JSONArray.fromObject(list);
out.println(json.toString());
3、添加JS触发事件
$('#unit_v').combotree({
url: '/wid/DataGrid/idx/c_key.jsp?id=1',
required: true,
onlyLeafCheck: true,
onBeforeExpand:function(node) { //这里是点击父节点后进行查询子节点
var $tree = $('#unit_v').combotree("tree");
$tree.tree("options").url = "/wid/DataGrid/idx/c_key.jsp?id=2&unit="+node.unit+"&nid="+node.id;
},
onSelect: function(node){
var unit = node.unit;
if(unit.length==9){
$("#unit").val(unit);
}else{
//$.messager.alert('消息提示','请选择到具体所单位!','warning');
}
}
});
以上就是所有代码了