zTree

效果


zTree插件即可用静态加载树形列表,也可用动态加载,动态加载时,后端只需要返回一个json字符串即可,前提是这个json用到的实体类的字段必须遵循zTree的API。如这里的实体类叫Menu,则它的字段如下,这是固定的:

package com.ifytek.domain;

import java.util.ArrayList;

public class Menu {
	int id;
	int pid;
	String urls;
	String name;
	ArrayList<Menu> children = new ArrayList<>();

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getPid() {
		return pid;
	}

	public void setPid(int pid) {
		this.pid = pid;
	}

	public String getUrls() {
		return urls;
	}

	public void setUrls(String urls) {
		this.urls = urls;
	}

	public ArrayList<Menu> getChildren() {
		return children;
	}

	public void setChildren(ArrayList<Menu> children) {
		this.children = children;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

下面具体讲一下过程:

1、首先需要引入几个css和js文件,


首页控制器:

package com.ifytek.controller;

import java.io.IOException;

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

@WebServlet("/index")
public class Index extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp);
	}
}

对应的前台:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="assets/js/jquery-1.4.4.min.js" ></script>
<script>
		
			$(function(){
				
			
				$("form").submit(function(){
					var dt=$("form").serialize();
					$.post("login",dt,function(data){
						//alert(data);
						if(data=="登录成功"){
							
							window.location.href="main";
						}else{
							alert(data);
						}
					});
					return false;
				})
			})
		</script>
<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			.container{
				width: 80%;
				margin: 0 auto;
			}
			#header{
				width: 1130px;
				height: 100px;
				background-color: gray;
				margin: 0 auto;
				text-align:center;
			}
			#content{
				width: 1130px;
				margin: 0 auto;
			}
			#left{
				width: 360px;
				height: 650px;
				background-color: gainsboro;
				float: left;
			}
			#right{
				height: 650px;
				float: left;
				width: 770px;
				background-color: darkgrey;
			}
			form{
				width: 100px;
				margin: 0 auto;
				margin-top: 200px;
			}
			form input{
				margin-top: 20px;
				height: 40px;
				font-size: 20px;
				width: 333px;
			}
			
		</style>
	</head>

	<body>
	<div id="header">
			<h1>设备报修系统</h1>
		</div>
		<div id="content">
			<div id="left">
				<h2>设备动态</h2>
				<h2>今日天气</h2>
			</div>
			<div id="right">
				<form method="post">
					<input type="text" name="username" placeholder="请输入用户名" /><br />
					<input type="password" name="pwd" placeholder="请输入密码" /><br />
					<input type="text" name="authcode" placeholder="请输入验证码" />
					<img src="getImg">
					<br />
					<input type="submit" value="登录" />
					<a href="">还没有账号,去注册</a>
					
				</form>
				
			</div>
		</div>
		
		
		

	</body>

</html>

2、登录成功请求的控制器:

package com.ifytek.controller;

import java.io.IOException;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/main")
public class Main extends HttpServlet{
@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	req.getRequestDispatcher("/WEB-INF/jsp/main.jsp").forward(req, resp);
	}
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

对应的视图:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎</title>
	<link rel="stylesheet" href="assets/css/zTreeStyle/zTreeStyle.css" type="text/css">
	<link rel="stylesheet" href="assets/css/home.css" type="text/css">
	<script type="text/javascript" src="assets/js/jquery-1.4.4.min.js"></script>
	<script type="text/javascript" src="assets/js/jquery.ztree.core.js"></script>
	<SCRIPT type="text/javascript">
		var setting = {
			view: {
				dblClickExpand: false,
				showLine: true,
				selectedMulti: false,
				showIcon: true,
				addDiyDom: addDiyDom
			},
			async: {
				enable: true,
				url:"getmenu",//请求树形组件
			},
			callback: {
				beforeClick: function(treeId, treeNode) {
					var zTree = $.fn.zTree.getZTreeObj("treeDemo");
					if (treeNode.isParent) {
						zTree.expandNode(treeNode);
						return false;
					} else {
						demoIframe.attr("src",treeNode.urls);
						return true;
					}
				}
			}
		};
		$(document).ready(function(){
			var t = $("#treeDemo");
			$.fn.zTree.init(t, setting);
			demoIframe = $("#testIframe");
			demoIframe.bind("load", loadReady);
		});
		function loadReady() {
			var bodyH = demoIframe.contents().find("body").get(0).scrollHeight,
			htmlH = demoIframe.contents().find("html").get(0).scrollHeight,
			maxH = Math.max(bodyH, htmlH), minH = Math.min(bodyH, htmlH),
			h = demoIframe.height() >= maxH ? minH:maxH ;
			if (h < 530) h = 530;
			demoIframe.height(h);
		}
		function addDiyDom(treeId, treeNode) {
			var spaceWidth = 5;
			var switchObj = $("#" + treeNode.tId + "_switch"),
			icoObj = $("#" + treeNode.tId + "_ico");
			switchObj.remove();
			icoObj.before(switchObj);

			if (treeNode.level > 1) {
				var spaceStr = "<span style='display: inline-block;width:" + (spaceWidth * treeNode.level)+ "px'></span>";
				switchObj.before(spaceStr);
			}
		}
	</SCRIPT>
</head>
<body>
	
	<div id="content">
		<TABLE border=0 height=650px align=left>
			<TR>
				<TD width=260px align=left valign=top style="BORDER-RIGHT: #999999 1px dashed">
					<ul id="treeDemo" class="ztree" style="width:260px; overflow:auto;"></ul>
				</TD>
				<TD width=1130px align=left valign=top><IFRAME ID="testIframe" Name="testIframe" FRAMEBORDER=0 SCROLLING=AUTO width=100%  height=700px SRC=""></IFRAME></TD>
			</TR>
		</TABLE>
	</div>
</body>
</html>

3、重点在于这个树形组件的获取:

控制器:

package com.ifytek.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.ifytek.service.LoginService;

@WebServlet("/getmenu")
public class GetMenuServlet extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		HttpSession session=req.getSession();
		String username=(String) session.getAttribute("username");
		LoginService service=new LoginService();
		String menujson=service.getMenuJson(username);
		System.out.println(menujson);
		resp.getWriter().write(menujson);
	}
}

service:

package com.ifytek.service;

import java.sql.PreparedStatement;


import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.ifytek.dao.LoginDao;
import com.ifytek.domain.Menu;
import com.ifytek.domain.Message;
import com.ifytek.domain.User;

import net.sf.json.JSON;
import net.sf.json.JSONArray;

public class LoginService {

	public Message checkLogin(User user) {
		Message message = new Message();
		LoginDao dao = new LoginDao();
		User dbuser = dao.getUserByUserName(user);
		if (dbuser == null) {
			message.setCode(401);
			message.setRes(false);
			message.setMsg("用户名不存在");
		} else {
			if (user.getPwd().equals(dbuser.getPwd())) {
				message.setCode(200);
				message.setRes(true);
				message.setMsg("登录成功");
			} else {
				message.setCode(402);
				message.setRes(false);
				message.setMsg("密码错误");
			}

		}
		dao.close();
		return message;
	}

	

	public int get_Id() {
		LoginDao dao=new LoginDao();
		int a=dao.get_Id();
		dao.close();
		return a;
	}

	
	

	
	public String getMenuJson(String username) {
		LoginDao dao=new LoginDao();
		ResultSet resultSet=dao.getIdByName(username);
		int uid = 0;
		
		try {
			while(resultSet.next()){
				uid = resultSet.getInt("id");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("uid为"+uid);
		ArrayList<Menu> menus=dao.getMenuByUid(uid);
		ArrayList<Menu> fmenu=new ArrayList<>();
		for(Menu menu:menus) {
			if(menu.getPid()==0) {
				//一级菜单
				System.out.println("..."+menu.getId());
				System.out.println("一级菜单:  "+menu.getName());
				fmenu.add(menu);
			}else {
				//非一级菜单
				
				
			}
		}
		for(Menu menu:menus){
			if(menu.getPid()!=0){
				System.out.println("。。。"+menu.getId());
				for(Menu fm : fmenu) {
					if(menu.getPid() == fm.getId()) {
						fm.getChildren().add(menu);
					}
				}
			}
		}
		JSONArray array=JSONArray.fromObject(fmenu);
		System.out.println("返回"+array.toString());
	
		return array.toString();
	}

}

dao:

package com.ifytek.dao;

import java.sql.Connection;


import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.ifytek.domain.Const;
import com.ifytek.domain.Menu;
import com.ifytek.domain.User;
import com.ifytek.util.DbUtil;

public class LoginDao {
DbUtil dbUtil;
	public User getUserByUserName(User user) {
		dbUtil = new DbUtil();
		String sql = "select * from userlogin where username=? ";
		ResultSet resultSet = dbUtil.executeQuery(sql, user.getName());
		try {
			if (resultSet.next()) {
				User dbuser = new User();
				dbuser.set_id(resultSet.getInt("id"));
				dbuser.setName(resultSet.getString("username"));
				dbuser.setPwd(resultSet.getString("pwd"));
				return dbuser;
			} else {
				return null;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	

	
	public int get_Id() {
		System.out.println();
		int a=1;
		dbUtil=new DbUtil();
		String sql="select max(id) from userlogin";
		ResultSet resultSet=dbUtil.executeQuery(sql);
		try {
			
				while(resultSet.next()){
					a=resultSet.getInt(1);
				}
				
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return a;
	}

	
	public void close() {
		dbUtil.close();
	}

	

	public ResultSet findUser(User user) {
		dbUtil=new DbUtil();
		String sql="select * from userlogin where username=?";
		ResultSet rs=dbUtil.executeQuery(sql, user.getName());
		return rs;
	}

	

	public ArrayList<Menu> getMenuByUid(int uid) {
		dbUtil=new DbUtil();
		//select * from menu m left join rolemenu rm on m.id=rm.mid left join loginrole lr on lr.rid=rm.rid where lr.lid=1;
		String sql="select * from menu m left join rolemenu rm "+
		" on m.id=rm.mid left join loginrole lr on lr.rid=rm.rid where lr.lid=?";
		ResultSet resultSet=dbUtil.executeQuery(sql, uid);
		ArrayList<Menu> list=new ArrayList<>();
		try {
			while(resultSet.next()){
				Menu menu=new Menu();
				menu.setId(resultSet.getInt("id"));
				menu.setUrls(resultSet.getString("murl"));
				menu.setName(resultSet.getString("name"));
				menu.setPid(resultSet.getInt("pid"));
				list.add(menu);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
}

说明:本项目使用了权限登录,不同权限的用户登录进来能访问的内容不一样。数据表:













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值