不所说重点上代码
使用combotree的异步加载方式;
jsp文件:
<div>
<div>部门</div><span><input id="deptCombotree"></span>
</div>
js文件:
//初始部门列表
$("#deptCombotree").combotree ({
url:path+"/record/deptlist?deptid=0",
onBeforeExpand:function(node) {
$("#deptCombotree").combotree("tree").tree("options").url = path+"/record/deptlist?deptid=" + node.id;
},
onSelect:function(node){
$("#RecordList2").datagrid('reload',{deptId:node.id,recodeMonth:document.getElementById("beginTime").innerHTML});
}
});
说明:
1)、onBeforeExpand实现异步加载;
2)、onSelect实现节点选定时触发table数据重载;
3)、combotree继承了combo和tree的所有事件和方法
EasyUITreeNode.java
import java.io.Serializable;
public class EasyUITreeNode implements Serializable {
/**
*
*/
private static final long serialVersionUID = -3722391707720182282L;
private long id;
private String text;
private String state;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
说明:一定注意节点的三个属性!!
DingDeptServiceImpl.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.aspectj.util.GenericSignature.TypeSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.vooledingtalk.common.pojo.EasyUITreeNode;
import com.vooledingtalk.dao.DingDeptMapper;
import com.vooledingtalk.pojo.DingDept;
import com.vooledingtalk.service.DingDeptService;
@Service
public class DingDeptServiceImpl implements DingDeptService {
@Autowired
private DingDeptMapper dingDeptMapper;
public boolean isParent(Long id) {
return dingDeptMapper.countChildDepts(id)>0 ? true : false;
}
public List<EasyUITreeNode> getDeptList(long id) {
List<EasyUITreeNode> nodes = new ArrayList<EasyUITreeNode>();
if (0 == id) {
//仅获取id==1的部门信息
DingDept root = dingDeptMapper.selectDeptById(1L);
EasyUITreeNode node = new EasyUITreeNode();
node.setId(root.getId());
node.setText(root.getName());
node.setState("closed");
nodes.add(node);
}else{
//获取直属子部门列表
List<DingDept> depts = dingDeptMapper.selectDirectChildDepts(id);
for (DingDept dingDept : depts) {
EasyUITreeNode node = new EasyUITreeNode();
node.setId(dingDept.getId());
node.setText(dingDept.getName());
node.setState(isParent(dingDept.getId()) ? "closed" : "open");
nodes.add(node);
}
}
return nodes;
}
}
说明:节点如果是父节点那么就是closed状态,如果是叶子节点则是open状态;
DingDeptController.java
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.vooledingtalk.common.pojo.EasyUITreeNode;
import com.vooledingtalk.service.DingDeptService;
@Controller
public class DingDeptController {
@Autowired
private DingDeptService dingDeptService;
@RequestMapping("/record/deptlist")
@ResponseBody
public List<EasyUITreeNode> getDeptList(@RequestParam(value="deptid" ,defaultValue="0")long parentId){
return dingDeptService.getDeptList(parentId);
}
}
本人文字描述功底不太好,所以就只简单上代码了。
-----------------------以下问本文的相关知识点-----------------------------------------------
一、combotree取值(转自https://my.oschina.net/u/1256202/blog/268556)
1,直接获取:
单选:$("#id").combotree("getValue")
多选:$("#id").combotree("getValues")
注意:如果value中的值和所显示的文本不同,如需获取文本内容,则可以使用getText(),多选同样加s。
2,在选择事件中获取:
onSelect:function(node){
node.text;或者 node.id;
}
3,使用api中方式
var t = $("#id").combotree('tree'); // 得到树对象
var n = t.tree('getSelected'); // 得到选择的节点
alert(n.text);