easyui-tree

(看时间应该 摘自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>


OrgListController.java

 /**
     * 生成组织机构树
     * @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;
    }    
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值