wabacus 与 ztree 结合的实战

前年写过一个集成ztree的帖子,当时是为了测试是否可用,树的节点是写死的。
本次基于一个小应用的需求,把ztree的集成落地与此项目。废话不多少,直接上代码。

1.准备工作还是请参照前文wabacus 集成ztree,链接为http://lgwt9829.iteye.com/blog/1834820

首先,将ztree需要的js包及css文件加载到项目中。如下图: 
把这些js文件copy到WebRoot\wabacusdemo\js\下面 
wabacus 与 ztree 结合的实战_第1张图片
 
同样把css文件copy到WebRoot\wabacusdemo\css下面 
wabacus 与 ztree 结合的实战_第2张图片
 

2.jsp页面

 

<%@page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<HTML>  
<HEAD>  
    <TITLE> ZTREE DEMO - Standard Data </TITLE>  
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
    <!--引用文件 -->  
    <link rel="stylesheet" href="webresources/tree/css/demo.css" type="text/css">  
    <link rel="stylesheet" href="webresources/tree/css/zTreeStyle/zTreeStyle.css" type="text/css">  
    <script type="text/javascript" src="webresources/tree/js/jquery-1.4.4.min.js"></script>  
    <script type="text/javascript" src="webresources/tree/js/jquery.ztree.core-3.5.js"></script>  
    <SCRIPT type="text/javascript">  
        <!--  
          
        var setting = {   
            callback: {  
                /* 点击节点,执行回调函数 */  
                onClick: zTreeOnClick
            },  
            data: {  
                simpleData: {  
                    enable: true  
                    }  
                }  
           };  
		 
        $.ajax({      
            //要用post方式      
            type: "Post",      
            //方法所在页面和方法名      
            url: "/dj/wTree",
            data:null,      
            contentType: "application/json; charset=utf-8",      
            dataType: "json",      
            success: function(myreturn) {      
                //返回的数据                            
                var zNodes =myreturn;
                $.fn.zTree.init($("#treeDemo"), setting, zNodes); 
            },      
            error: function(err) {      
                alert("错了:"+err);      
            }      
        });
		      
        /*  点击节点执行方法,主要是更改ifream中src的值 */  
        function zTreeOnClick(event, treeId, treeNode) {  
            document.getElementById('sampleframe').src='/dj/ShowReport.wx?PAGEID=view&txtid='+treeNode.id+'';  
        };  
       
        //-->  
    </SCRIPT>  
</HEAD>  
  
<BODY>  
<h1>上传材料 </h1>  
<div class="content_wrap">  
    <div class="zTreeDemoBackground left">  
        <ul id="treeDemo" class="ztree"></ul>  
    </div>  
    <div class="right">  
        <iframe id="sampleframe" name="sampleframe" width="100%" height="99%" frameborder="0" src="" style="border: 0px solid #cecece;"></iframe>  
    </div>  
</div>  
</BODY>  
</HTML>  

 

 

 其中 使用ajax的方式异步获取节点信息。

 

 $.ajax({      
            //要用post方式      
            type: "Post",      
            //方法所在页面和方法名      
            url: "/dj/wTree",
            data:null,      
            contentType: "application/json; charset=utf-8",      
            dataType: "json",      
            success: function(myreturn) {      
                //返回的数据                           
                var zNodes =myreturn;
                $.fn.zTree.init($("#treeDemo"), setting, zNodes); 
            },      
            error: function(err) {      
                alert("错了:"+err);      
            }      
        });

 

 

3.通过类来获取数据库里的数据并组装成符合ztree要求的json对象。

 

package com.lg.tree;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.mysql.jdbc.ResultSetMetaData;
import com.wabacus.config.Config;
/**
 * 思路:
 * 1.创建数据连接
 * 2.通过result获取查询结果
 * 3.通过org.json的jar包将结果转为json对象
 * */
public class wTree  extends HttpServlet implements javax.servlet.Servlet {
	public void buildTree(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		Connection conn =Config.getInstance().getDataSource("").getConnection();
		String sql ="select id_ as id , pid as pId , lb as name from define where flag='有效'";
		PreparedStatement pstmt = null;
		String jsonStr  = null;
		response.setCharacterEncoding("UTF-8");//为response设置字符集,否则前台乱码
		PrintWriter out = response.getWriter();	
		try {
			pstmt =conn.prepareStatement(sql);
			ResultSet rs = pstmt.executeQuery();
			jsonStr = resultSetToJson(rs);
			
			out.write(jsonStr);	
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("这里失败了");
		}
		
	}
	
	//结果集转json的方法
	public String resultSetToJson(ResultSet rs) throws SQLException,JSONException{
		//定义json数组
		JSONArray ja = new JSONArray();
		
		//获取结果集信息
		ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();
		int count = metaData.getColumnCount();

		//遍历每条数据
		while(rs.next()){
			JSONObject jsonObj = new JSONObject();
			
			//遍历每列
			for(int i = 1; i<=count;i++){
				String label = metaData.getColumnLabel(i);
				String value = rs.getString(label);
				jsonObj.put(label, value);
			}
			ja.put(jsonObj);
		}
		return ja.toString();
	}
	/**
	 * POST方法
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		buildTree(request, response);
	}
}

 

 

 本类就3个方法,一个是post,一个是链接数据库,通过把数据查出来,并组装成id ,pid , 节点名 的结构。然后通过resultSetToJson方法将结果集转为json对象。

 

4.最后,自然要在web.xml中注册servelt了

 

        <servlet-mapping>
		<servlet-name>reportservlet</servlet-name>
		<url-pattern>/ShowReport.wx</url-pattern>
	</servlet-mapping>
	
	<servlet>
	<servlet-name>wTree</servlet-name>
		<servlet-class>com.lg.tree.wTree</servlet-class>		
	</servlet>

 

 

5.数据库结构图

 
wabacus 与 ztree 结合的实战_第3张图片
 测试数据如下:
wabacus 与 ztree 结合的实战_第4张图片
  数据库很简单,就是常见的id pid的结构

 

6.最后实现了树与report的对接,显示如下

 


wabacus 与 ztree 结合的实战_第5张图片
 

恩,至此,ztree与wabacus就算无缝对接了,说起来也很简单,就是一个前后台传值 以及 节点出发url显示page的过程。

需要注意的是,因为ie6 7 9 与 360 对 json支持有限,在chrome下调试没有问题,但是在这两个浏览器中树会出现异常,百度了一下,得知json中 要去掉最后一个逗号 以及 相关脚本中要注意最后一个不能加逗号,比如data和callback中均需要注意。

 

好了,本文就写到这,相关事宜可以加wabacus的群咨询。

你可能感兴趣的:(wabacus)