FastJson+Ztree:根据数据库层级表生成目录树

目标:

数据库层级表:

到目录树结构的实现全过程:

中间产生的JSON数据:


实现途径:

配置jdbc数据源,从数据库中读取以上的层级表,将所有的记录存到ArrayList中,利用fastJson将其解析成JSON数据格式(序列化),而后利用ztree生成目录树结构。

工具版本:

fastJson1.1.9,ztree3.5,jdk1.7,struts1.2,jquery1.4,oracle9i

实现步骤:


index.jsp(访问http://localhost:8088/fastjson/index.jsp)

<%@ page language="java"import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
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>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<Metahttp-equiv="pragma" content="no-cache">
<Metahttp-equiv="cache-control" content="no-cache">
<Metahttp-equiv="expires" content="0">
<Metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<Metahttp-equiv="description" content="This is my page">
<!--
<linkrel="stylesheet" type="text/css"href="styles.css">
-->
</head>
<body>
<%
response.sendRedirect("getJson.do");
%>
</body>
</html>


GetJsonAction.javaActionServlet

package com.nns.struts.action;
importjavax.servlet.http.HttpServletRequest;
importcom.nns.util.Menu;
importcom.alibaba.fastjson.*;
importjava.util.ArrayList;
importjava.util.List;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.sqlException;
importjava.sql.Statement;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.naming.NamingException;
importjavax.sql.DataSource;
publicclass GetJsonAction extends Action {
publicActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequestrequest,HttpServletResponse response) {

List<Menu> m = new ArrayList<Menu>();
//连接数据源
Connectionconn = null;
try {
Context ctx= new InitialContext();
ContextcompNamingContext = (Context)ctx.lookup("java:comp/env");
DataSourceds = (DataSource)compNamingContext.lookup("jdbc/user1DataSource");
try {
conn =ds.getConnection();
if(conn==null){
System.out.println("获取数据源连接失败");
} else {
Statement st= conn.createStatement();
String sql ="select * from jsontree";
ResultSet rs= st.executeQuery(sql);
Stringid="",pid="",name="",t="";
while(rs.next()){
id=rs.getString("id");
pid=rs.getString("pid");
name=rs.getString("name");
t=rs.getString("t");
//System.out.println("=="+id+"=="+pid+"=="+name+"=="+t);
Menu m1 =new Menu();
m1.setId(id);
m1.setPid(pid);
m1.setName(name);
m1.setT(t);
m.add(m1);
}
}
} catch(sqlException e) {
e.printstacktrace();
}
} catch(NamingException e) {
e.printstacktrace();
} finally{
if(conn!=null){
try {
conn.close();
} catch(sqlException e) {
e.printstacktrace();
}
conn=null;
}
}
//序列化过程
String jsonString = JSON.toJSONString(m);
System.out.println("序列化(将javabean对象转换成json数据)");
System.out.println(jsonString.replaceAll("pid","pId"));
request.setAttribute("jsondata",jsonString.replaceAll("pid",153); white-space:pre">
//反序列化测试
List<Menu> mcs = new ArrayList<Menu>();
mcs = JSON.parseArray(jsonString,Menu.class);
System.out.println("反序列化(将json数据还原成javabean对象)");
Iterator<Menu> iter = mcs.iterator();
while(iter.hasNext()){
Menu mu = iter.next();
System.out.println("id="+mu.getId()+";pid="+mu.getPid()+";name="+mu.getName()+";t="+mu.getT());
}
return mapping.findForward("success");
}
}


success.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>
<base href="<%=basePath%>">
<title>My JSP 'goto.jsp' starting page</title>
<Metahttp-equiv="pragma" content="no-cache">
<Metahttp-equiv="cache-control" content="no-cache">
<Metahttp-equiv="expires" content="0">
<Metahttp-equiv="keywords" content="keyword1,keyword3">
<Metahttp-equiv="description" content="This is my page">
<scripttype="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<script type="text/javascript"src="js/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" src="js/jquery.ztree.excheck-3.5.js"></script>
<linkrel="stylesheet" href="css/demo.css"type="text/css" />
<link rel="stylesheet"href="css/zTreeStyle/zTreeStyle.css" type="text/css" />

<SCRIPTtype="text/javascript">
varsetting= {
data:{
key:{
title:"t"
},
simpleData:{
enable:true,
idKey:"id",
pIdKey:"pId",
rootPId:0
}
},
callback:{
onClick:onClick
}
};
varzNodes=<%=(String)request.getAttribute("jsondata")%>;
functionbeforeClick(treeId,treeNode,clickFlag) {
}
functiononClick(event,treeId,clickFlag) {
//treeId是目录树的id,即treeDemo
//alert('目录树的id:'+treeId);
//alert('名称'+treeNode.name);
alert('父节点id'+treeNode.pId);
alert('节点id'+treeNode.id);
//alert('选中标示:'+clickFlag);
}
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"),setting,zNodes);
});
//-->
</SCRIPT>
</head>
<body>
<div>
<ul id="treeDemo" class="ztree">
</ul></div>
</body>
</html>


Menu.java(工具类javabean):

package com.nns.util;
import java.util.ArrayList;
import java.util.List;
public class Menu {
private String id = ""; //
当前节点id
private String pid = ""; //
父级节点 id
private String name = "";//
节点名称
private String t=""; //
提示
//private List<Menu> menus = new ArrayList<Menu>();
//
可根据需要添其他属性 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getT() { return t; } public void setT(String t) { this.t = t; } /* public List<Menu> getMenus() { return menus; } public void setMenus(List<Menu> menus) { this.menus = menus; } */ }

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...