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数据库截图,
- zTree异步加载菜单节点--从数据库中查询
- ZTree异步加载时查询节点
- 前端框架 zTree 从数据库中动态加载树形菜单
- Ztree异步加载树节点
- zTree异步加载树形菜单
- 前端框架 (一)zTree 从数据库中动态加载树形菜单
- 前端框架 (一)zTree 从数据库中动态加载树形菜单
- ztree学习之异步加载节点
- 异步&同步加载树节点----zTree(一)
- ztree+dwr实现异步加载树形菜单
- zTree 异步加载 添加子节点重复问题
- zTree 异步加载 添加子节点重复问题
- zTree异步加载数据,默认展开全部节点
- zTree 异步加载
- Ztree 异步加载
- zTree checkbox 异步加载
- zTree 异步加载
- ztree异步加载数据
- javascripts中confirm(),prompt()方法及其使用方法
- Linux 自定义命令 (alias 的使用)
- mysql更新语句中的safe_mode
- javascript获取页面宽度高度及屏幕分辨率
- 图片的压缩与裁剪
- zTree异步加载菜单节点--从数据库中查询
- 页面回退的方式
- shell脚本----------路由和数据库的同步
- java工具类11.1之Gson,Jsonobject,中文乱码,接口
- 数组
- RAII惯用法:C++资源管理的利器
- 请求WCF时:HTTP 请求已超过分配的超时。为此操作分配的时间可能是较长超时的一部分
- NHibernateHelper
- VMware Player 虚拟机中音乐播放无声音 问题