zTree异步加载菜单节点--从数据库中查询

来源:互联网 发布:java生命周期包括 编辑:程序博客网 时间:2024/04/28 08:43

项目需要一个动态菜单,随手做了一个demo,留着以后参考。


JSP+Servlet从oracle中查找菜单显示出来,废话不说,直接上图

最终效果图

代码:

1.index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>ztree demo</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="./css/demo.css">
<link rel="stylesheet" type="text/css" href="./css/zTreeStyle/zTreeStyle.css">
<script type="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">  
    var setting = { 
    data: { 
    simpleData: { 
    enable: true  
   
    },
    async: { 
    enable: true, 
    url:"tree.action", 
    autoParam:["id=pid"],
    dataFilter: filter //异步返回后经过Filter 
    }, 
    callback:{ 
    asyncSuccess: zTreeOnAsyncSuccess,//异步加载成功
    asyncError: zTreeOnAsyncError, //加载错误 
    beforeClick:beforeClick //捕获单击节点之前的事件回调函数 
   
    }; 
   
    function filter(treeId, parentNode, childNodes) { 
   
    if (!childNodes) return null; 
    for (var i=0, l=childNodes.length; i<l; i++) { 
    childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
   
    return childNodes; 
   
    function beforeClick(treeId,treeNode){ 
    if(!treeNode.isParent){ 
    alert("请选择父节点"); 
    return false; 
    }else{ 
    zTree.expandNode(treeNode);
    return true; 
   
   
    function zTreeOnAsyncError(event, treeId, treeNode){ 
    alert("异步加载失败!"); 
   
    function zTreeOnAsyncSuccess(event, treeId, treeNode, msg){ 


   
   
    var zNodes=[]; 
   
    $(document).ready(function(){ 
    $.fn.zTree.init($("#tree"), setting, zNodes); 
    }); 
    </script>  
<body>  
    <ul id="tree" class="ztree"></ul>  
</body>  
</html>  


2.web.xml   

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  
  <servlet>
  <servlet-name>servlet</servlet-name>
  <servlet-class>servlet.TestServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>servlet</servlet-name>
  <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


3.TestServlet    没有处理请求路径,因为只是一个demo,.action结尾的请求都处理了

package servlet;


import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;


import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;


import com.alibaba.fastjson.JSON;


import dao.MenuDao;
import entity.Menu;


@SuppressWarnings("serial")
public class TestServlet extends HttpServlet {


@SuppressWarnings("unchecked")
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("pid:"+request.getParameter("pid"));
response.setCharacterEncoding("UTF-8"); 
PrintWriter out = response.getWriter(); 
int pid = 0;
MenuDao dao = new MenuDao();
List<Menu> menus =  new ArrayList<Menu>();
if(request.getParameter("pid")==null||"".equals(request.getParameter("pid"))){
try {
menus = dao.getRoot();
} catch (Exception e) {
e.printStackTrace();
}
}else{
pid = Integer.parseInt(request.getParameter("pid"));
try {
menus = dao.getNextNodes(pid);
} catch (Exception e) {
e.printStackTrace();
}
}

String str = JSON.toJSONString(menus); 
System.out.println("str:"+str);
out.print(str); 

}
}



4.dao

package dao;


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;


import util.DBUtil;
import entity.Menu;
@SuppressWarnings("rawtypes")
public class MenuDao {





public List getRoot() throws Exception {
Connection conn = DBUtil.getConnection();
Statement st = conn.createStatement();
ResultSet rs =st.executeQuery("select * from dept where pid is null");
Menu menu ;
List<Menu> menus = new ArrayList<Menu>();
while(rs.next()){
menu = new Menu();
menu.setId(rs.getInt("id"));
menu.setPid(rs.getInt("pid"));
menu.setName(rs.getString("name"));
if("1".equals(rs.getString("isParent"))){
menu.setIsParent(true);
}else{
menu.setIsParent(false);
}
menus.add(menu);
}
for(int i =0;i<menus.size();i++){
System.out.println(menus.get(i).getName());
}
return menus;
}


public List getNextNodes(int pid) throws Exception{
Connection conn = DBUtil.getConnection();
Statement st = conn.createStatement();
ResultSet rs =st.executeQuery("select * from dept where pid ="+pid);
Menu menu ;
List<Menu> menus = new ArrayList<Menu>();
while(rs.next()){
menu = new Menu();
menu.setId(rs.getInt("id"));
menu.setPid(rs.getInt("pid"));
menu.setName(rs.getString("name"));
if("1".equals(rs.getString("isParent"))){
menu.setIsParent(true);
}else{
menu.setIsParent(false);
}
menus.add(menu);
}
for(int i =0;i<menus.size();i++){
System.out.println(menus.get(i).getName());
}
return menus;

}


}



5.bean

package entity;


public class Menu {

private int pid;
private int id;
private String name;
private boolean isParent;
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getIsParent() {
return isParent;
}
public void setIsParent(boolean isParent) {
this.isParent = isParent;
}

}


6.dbutil

package util;


import java.sql.Connection;
import java.sql.DriverManager;


public class DBUtil {

public static Connection getConnection() throws Exception{
 Connection conn = null;
 Class.forName("oracle.jdbc.driver.OracleDriver");//加入oracle的驱动,“”里面是驱动的路径
  
 String url = "jdbc:oracle:thin:@localhost:1521:orcl";// 数据库连接,oracle代表链接的是oracle数据库;thin:@MyDbComputerNameOrIP代表的是数据库所在的IP地址(可以保留thin:);1521代表链接数据库的端口号;ORCL代表的是数据库名称


 String UserName = "root";// 数据库用户登陆名 ( 也有说是 schema 名字的 )


 String Password = "root";// 密码


 conn = DriverManager.getConnection(url, UserName, Password);
 return conn;
}

public static void main(String[] args) throws Exception {
System.out.println(getConnection());
}
}


工程截图

用到了两个jar,

oracle数据库截图,


原创粉丝点击