当前位置:编程学习 > JAVA >>

SpringMVC + EasyUI 异步树

关于异步树以前用过:Struct2 + JQuery Ztree,最新项目需要用 SpringMVC + EasyUI 生成异步树,玩了一下,特将解决方法汇报如下:
       首先,使用是EasyUI的Tree组件,官网Demo提供的异步树示例是PHP版本的,参考意义不大,
       URL为:http://www.jeasyui.com/demo/main/index.php?plugin=Tree&theme=default&dir=ltr&pitem= ,有兴趣的也可以看下。
       下面开始分析业务:
       业务场景:
       
      如上,学校下面存在年级、年级下面存在班级,默认加载所有的学校,点击单个学校后,方才异步加载该学校的所有年级,点击年级后,方才加载班级。
      js / jsp文件:     
[javascript]  
<ul id="gcttree" data-options="animate:true,lines:true"></ul>  
      
[html]  
 $('#gcttree').tree({  
      //异步树   
    url: basePath + '/school/list_school_gct,  
    onBeforeExpand: function(node){  
        if(node){  
            // change the url    
            // currentId: 当前节点id  currentType: 当前节点类型   
            $('#gcttree').tree('options').url = basePath + "/school/list_school_gct?currentId=" + node.id + "currentType=" + node.attributes.type;    
        }  
    }        
});  
     这里用到了,Tree组件的onBeforeExpand事件(API:http://www.jeasyui.com/documentation/index.php)
 
onBeforeExpand node Fires before node is expanded, return false to cancel this expand action.
     也即每次展开一个节点之前调用该事件,这个和上面的业务分析很契合,点击学校触发异步生成年级树,点击年级触发异步树生成班级树。
     controller层:
[java]  
/** 
     * 获取学校、年级、班级列表(异步树) 
     *  
     * @param request 
     * @return json数据 
     */  
    @RequestMapping(value = "/list_school_gct")  
    @ResponseBody  
    public List<Map<String, Object>> listSchoolGCT(HttpServletRequest request)   
    {  
        List<Map<String, Object>> list = null;  
        try   
        {                 
            // 当前节点id  
            String currentId = request.getParameter("currentId");  
              
            // 当前节点类型  
            String currentType = request.getParameter("currentType");             
              
            list = schoolService.treeData(currentId ,currentType);  
        } catch (Exception e)   
        {  
            logger.error(e);  
        }  
        return list;  
    }  
 
      service  / dao 层:
[java]  
/** 
     * 获取树状数据(组装tree所用  异步树) 
     *  
     * @param currentId 当前节点id 
     * @param currentType 当前节点类型 school=学校  grade=年级 class=班级 
     *              
     * @return 学校、年级、班级树 
     */   
    public List<Map<String, Object>> treeData(String currentId, String currentType)   
    {  
        List<Map<String, Object>> list = new LinkedList<Map<String, Object>>();  
          
        Map<String, String> attr = null;  
          
        // 如果当前节点类型为空 则是第一次加载 即需要加载学校json  
        if(StringUtils.isEmpty(currentType))  
        {  
            // 查询所有的学校   
            list = ischoolDao.treeData();  
            for (Map<String, Object> school : list)   
            {  
                attr = new HashMap<String, String>();  
                attr.put("type", "school");  
                school.put("attributes", attr);  
                //注意此时学校节点要关闭,方能触发onBeforeExpand事件  
                school.put("state", "closed");  
            }  
        }  
        // 如果当前节点类型为学校 则异步加载年级json  
        else if(StringUtils.equals("school", currentType))  
        {  
            // 根据学校id查询班级  
            list= igradeDao.listData(currentId);  
            if(!CollectionUtils.isEmpty(list))  
            {  
                for (Map<String, Object> grade : list)   
                {  
                    attr = new HashMap<String, String>();  
                    attr.put("type", "grade");                      
                    grade.put("attributes", attr);  
                   
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,