现在位置首页 / 前端开发 /正文

ztree+java异步加载demo

作者: IT小兵 | 2016年6月13日| 热度:℃ | 评论: |参与:

本篇给大家分享一下 ztree+java异步加载demo。ztree支持加载数据量可以做大,预计一个页面5000+都是可以的。 

Ztree异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载。

参考官方的说明: 

http://www.ztree.me/v3/demo.php#_307

本demo采用SpringMvc+Mybatis。参见代码结构图:

前台代码jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ztree</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css"
    href="<%=request.getContextPath()%>/css/zTreeStyle.css">
<script type="text/javascript"
    src="<%=request.getContextPath()%>/js/jquery-1.9.1.min.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/js/jquery.ztree.core.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/js/jquery.ztree.excheck.min.js"></script>
<script type="text/javascript">
   /**
    *异步加载的意思就是: 当点击展开树节点时,
    *才去请求后台action返回点击节点的子节点
    *数据并加载。
    */
    var setting = {
        data : {
            key:{
                name:"catalogName"
            },
            simpleData : {
                enable : true,
                idKey:"catalogId", 
                pIdKey:"parentId", 
            }
        },
        async : {
            enable : true,
            url : "ztree/list.ht",
            autoParam : [ "catalogId", "catalogName" ],
            dataFilter : filter
        //异步返回后经过Filter 
        },
        callback : {
            // beforeAsync: zTreeBeforeAsync, // 异步加载事件之前得到相应信息 
            OnAsyncSuccess : zTreeOnAsyncSuccess,//异步加载成功的fun 
            aOnAsyncError : zTreeOnAsyncError, //加载错误的fun 
            beforeClick : beforeClick,//捕获单击节点之前的事件回调函数 
            onRightClick: zTreeOnRightClick
        }
    };
    //treeId是treeDemo,异步加载完之后走这个方法 
    function filter(treeId, parentNode, childNodes) {
        if (!childNodes)
            return null;
        childNodes = eval(childNodes);
        return childNodes;
    }
    //点击节点触发事件
    function beforeClick(treeId, treeNode) {
        if (!treeNode.isParent) {
            alert("请选择父节点");
            return false;
        } else {
            return true;
        }
    }
    //异步加载失败走该方法
    function zTreeOnAsyncError(event, treeId, treeNode) {
        alert("异步加载失败!");
    }
    //异步加载成功走该方法
    function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {
    }
    //右击事件
    function zTreeOnRightClick(){
        alert("asdas");
    }
    /**********当你点击父节点是,会异步访问controller,把id传过去*************/
    var zNodes = [];
    $(document).ready(function() {
        $.fn.zTree.init($("#treeDemo"), setting, zNodes);
    });
</script>
</head>
<body>
    <div style="height:600px; width:98%">
        <div style="height:600px; width:20%; border:1px solid #999999; float:left">
            <ul id="treeDemo" class="ztree"></ul>
        </div>
        <div style="height:600px; width:79.5%; border:1px solid #999999; float:left; overflow:auto">
            <iframe id="testIframe" name="testIframe" frameborder=0 scrolling=auto width=90%  height=580px src="ztree/welcome.ht"></iframe>
        </div>
    </div>
</body>
</html>

后台处理逻辑:

package com.henu.controller;
import java.io.PrintWriter;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.henu.model.Ztree;
import com.henu.service.ZtreeService;
@Controller
@RequestMapping("/ztree/")
public class ZtreeController {
    @Resource
    private ZtreeService ztreeService;
    
    @RequestMapping("page")
    public String page(){
        return "ztree/ztreeList";
    }
    
    @RequestMapping("welcome")
    public String welcome(){
        return "ztree/welcome";
    }
    
    @RequestMapping("list")
    public void list(HttpServletRequest request, HttpServletResponse response) throws Exception{
        String catalogIdParam = request.getParameter("catalogId");
        Long catalogId = null;
        if (catalogIdParam != null) {
            catalogId = Long.parseLong(catalogIdParam);
        }
        String catalogName = request.getParameter("catalogName");
        System.out.println(catalogId + "|" + catalogName + "|");  
        List<Ztree> ztreeList = ztreeService.getZtree(catalogId);  
        PrintWriter out = response.getWriter(); 
        String str = JSONArray.fromObject(ztreeList).toString(); 
        System.out.println(str);
        out.print(str);
    }
}

服务代码Service层ZtreeService.java: 

package com.henu.service;
import java.util.List;
import com.henu.model.Ztree;
public interface ZtreeService {
    List<Ztree> getZtree(Long catalogId);
}

ServiceImpl层ZtreeServiceImpl.java:

package com.henu.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.henu.dao.ZtreeDAO;
import com.henu.model.Ztree;
import com.henu.service.ZtreeService;
@Service
public class ZtreeServiceImpl implements ZtreeService{
    @Resource
    private ZtreeDAO ztreeDAO;
    public List<Ztree> getZtree(Long catalogId) {
        return ztreeDAO.getZtree(catalogId);
    }
}

持久层ZtreeDAO: 

package com.henu.dao;
import java.util.List;
import javax.annotation.Resource;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Component;
import com.henu.model.Ztree;
@Component
public class ZtreeDAO {
    @Resource
    private SqlSessionTemplate sqlSessionTemplate;
    
    public List<Ztree> getZtree(Long catalogId) {
        List<Ztree> ztreeList = sqlSessionTemplate.selectList("com.henu.model.Ztree.getZtree",catalogId);
        return ztreeList;
    }
}
Ztree.map.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="com.henu.mapping.userMapper"就是com.henu.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
 -->
<mapper namespace="com.henu.model.Ztree">
    <select id="getZtree" resultType="com.henu.model.Ztree">
        select * from henu_catalog where 1=1
        <if test="_parameter!=null and _parameter!='' ">  
            and parentId = #{_parameter,jdbcType=NUMERIC}
        </if> 
        <if test="_parameter == null ">  
            and parentId = 1
        </if> 
        order by catalogId
    </select>
</mapper>


 参考:

ztree异步加载 - 时间淡忘了谁 - 博客园

http://www.cnblogs.com/henuyuxiang/p/5556830.html


点击阅读本文所属分类的更多文章: 前端开发 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:[email protected]

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:[email protected]

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询