(看时间应该 摘自idv项目)
考虑性能问题采用异步加载,后台用jskson的ObjectMapper来转json数据
(最下面有效果图)
树的数据格式
每个节点可以包含以下属性:(so easyui-tree 只能直接获取如下这几个属性)
- id: 节点ID,这是很重要的加载远程数据
- text: 文字显示节点
- state: 节点的状态,“开放”或“关闭”,默认为“打开”。 当设置为“关闭”,该节点有子节点,并将它们远程加载
- checked: 指示节点是否被选中选中.
- attributes: 自定义属性可以被添加到一个节点(其它的属性如code、parentid啦)
- children: 一个数组节点有一些子节点
***___+++==异步树需要注意--》要在展开节点之前,树初始化之后重新查询数据
1.通常在 onBeforeExpand 或 onBeforeLoad 下面重新发出请求
2.在对树进行曾删改的时候,为了提高效率,通常优先选择 在前台js里面进行处理
JSP代码
$(function() {
// 初始化组织树
initTreeRoot("orgTree", "org/fillTree", treeOnClick);
});
//加载树,显示组织机构节点
function initTreeRoot(treeName, strUrl, funcName){
$('#'+treeName).tree({
checkbox : false,
url : strUrl+"?root=Y",
animate : true,
onBeforeExpand:function(node,param){ //展开节点的时候,从后台加载该节点的下级数据
$('#'+treeName).tree('options').url = strUrl+"?parentId=" + node.id;
},
onClick: function(node){funcName(node)}
});
}
//单击事件
function treeOnClick(node) {
//获得单击节点的属性
parentId=node.id;
parentName=node.text;
}
<div data-options="region:'west',split:true,border:false"" title="组织机构树" style="width: 180px;">
<ul id="orgTree" class="easyui-tree"></ul>
</div>
/**
* 生成组织机构树
* @param model
* @param request
* @return*/
@RequestMapping(value = "fillTree")//这是spring的注解
@ResponseBody
public String fillTree(Model model, ServletRequest request) {
String parentId = request.getParameter("parentId");
String root = request.getParameter("root");
List<OrgTreeNode> nodeList = new ArrayList<OrgTreeNode>();
// 若root为Y则初始化时添加节点 【组织结构】 //数据库中并不存在改条数据;为了业务需求而添加的假数据
if ("Y".equals(root) && parentId == null) {
nodeList = new ArrayList<OrgTreeNode>();
OrgTreeNode node = new OrgTreeNode();
node.setId(0L);
node.setText("组织机构");
node.setState("closed");
// 拼接组织结构节点属性
OrgTreeNodeAttr attributes = new OrgTreeNodeAttr();
attributes.setCode("0");
node.setAttributes(attributes);
nodeList.add(node);
}
else {
parentId = (parentId == null ? "0" : parentId);
// 获得该节点的下级节点
List<SpecialOrgImpl> orgList = orgService.getSpecialOrgChildren(Long.parseLong(parentId)); //sql语句
for (SpecialOrgImpl org : orgList) {
OrgTreeNode node = new OrgTreeNode();
node.setId(org.getId());
node.setText(org.getName());
// 判断该层节点是否有子节点,有则closed否则open
if (orgService.findByParentIds(org.getId().toString())) { //sql语句
node.setState("closed");
}
else {
node.setState("open");
}
// 拼接属性
OrgTreeNodeAttr attributes = new OrgTreeNodeAttr();
attributes.setCode(org.getCode());
node.setAttributes(attributes);
nodeList.add(node);
}
}
String liststr = "";
try {
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
liststr = mapper.writeValueAsString(nodeList);
}
catch (Exception e) {
throw new BusinessException("error");
}
return liststr;
}
OrgTreeNode.java
public class OrgTreeNode {
private Long id; //要显示的子节点的ID
private String text; //要显示的子节点的 Text
private String iconCls; //节点的图标
private String parentId; //父节点的ID
private List<OrgTreeNode> children; //孩子节点的List
private String state;
private OrgTreeNodeAttr attributes;
public OrgTreeNode(){}
public OrgTreeNode(Long id, String text, String iconCls, String parentId,List<OrgTreeNode>children,String state) {
super();
this.id= id;
this.text= text;
this.iconCls= iconCls;
this.parentId= parentId;
this.children= children;
this.state = 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 getIconCls() {
return iconCls;
}
public void setIconCls(String iconCls) {
this.iconCls= iconCls;
}
public String getParentId(){
return parentId;
}
public void setParentId(String parentId) {
this.parentId= parentId;
}
public List<OrgTreeNode> getChildren() {
return children;
}
public void setChildren(List<OrgTreeNode> children) {
this.children= children;
}
//添加孩子的方法
public void addChild(OrgTreeNode node){
if(this.children == null){
children= new ArrayList<OrgTreeNode>();
children.add(node);
}else{
children.add(node);
}
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public OrgTreeNodeAttr getAttributes() {
return attributes;
}
public void setAttributes(OrgTreeNodeAttr attributes) {
this.attributes = attributes;
}
}
OrgTreeNodeAtter.java
/** 组织机构树节点的扩展属性
* 组织机构树节点的扩展属性 * Time:2013-5-22 下午3:03:42<br/>
*/
public class OrgTreeNodeAttr {
/** 组织机构树节点的扩展属性 */
protected String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}