easyui Tree后端工作

本文介绍了如何在easyui的Tree控件基础上优化,从数据库获取数据并展示在web页面上,同时添加了选项卡功能。当点击左侧菜单的子节点时,右侧会创建选项卡并加载对应页面。涉及的技术包括Java后端处理、数据库操作和easyui的Tree及选项卡组件使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 上期回顾

easyui的基本使用和布局https://blog.youkuaiyun.com/weixin_62270300/article/details/124600661?spm=1001.2014.3001.5501

上篇文章菜单搭建的数据是定死的 。今天这篇文件在上篇菜单搭建的基础上进行优化 将数据从数据库中提取出来 显示在页面上 如下图所示

菜单搭建使用树控件搭建的 什么是树控件?树控件在web页面中一个将分层数据以树形结构进行显示。它提供用户展开、折叠、拖拽、编辑和异步加载等功能。

 除了这一功能外 还增加了选项卡的功能   

选项卡显示一批面板。但在同一个时间只会显示一个面板。每个选项卡面板都有头标题和一些小的按钮工具菜单,包括关闭按钮和其他自定义按钮。

选项卡的效果如下图所示:

 主要实现的功能当左侧菜单的子节点被点击时右侧创建选项卡 并根据数据库中子节点的路径显示对应的页面

具体代码如下:

index.jsp(主页面) 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/easyui/themes/default/easyui.css">
<script  rel="stylesheet" src="${pageContext.request.contextPath}/easyui/jquery.min.js"></script>
<script  rel="stylesheet" src="${pageContext.request.contextPath}/easyui/jquery.easyui.min.js"></script>

</head>

<body class="easyui-layout">
	<div data-options="region:'north',title:'网站导航栏',collapsible:false"
		style="height: 100px;"></div>
	<div data-options="region:'west',title:'菜单',split:true"
		style="width: 20%;">
		<ul id="asideMenu"></ul>
	</div>
	<div data-options="region:'center',collapsible:false,border:false"
		style="padding: 5px; background: #eee;">
		<div id="mainTab" class="easyui-tabs"
			style="width: 100%; height: 100%;"></div>
	</div>
	<script>
 let mainTab = $('#mainTab')

  $('#asideMenu').tree({
      url: '${pageContext.request.contextPath}/permission.do', //远程数据的地址
      method: "POST",//访问方式
      lines: true, //显示虚线
      onClick(node) {
          //判断是否是父节点
          if (!node.attributes['pid']) {
              return
          }
          //判断是不是已经打开了
          if(mainTab.tabs('exists',node.text)){
              mainTab.tabs('select',node.text)
              return
          }
          mainTab.tabs('add', {
        	  closable:true,
        	  
              id:node.id,
              title: node.text,

             //content:"<iframe src='"+node.attributes['url']+"'></iframe>"
              href:node.attributes['url']
          });
      }
  });
		</script>
</body>


</html>

 PermissionServlet.java

package com.zking.servlet;

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 com.fasterxml.jackson.databind.ObjectMapper;
import com.zking.biz.IPermissionBiz;
import com.zking.biz.impl.PermissionBizImpl;

@WebServlet("/permission.do")
public class PermissionServlet extends HttpServlet{

	private IPermissionBiz permissionBiz=new PermissionBizImpl(); 
	
	private ObjectMapper mapper=new ObjectMapper();
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//查询所有的菜单,将菜单写出去
		mapper.writeValue(resp.getOutputStream(), permissionBiz.listNodes());
	}
}

 TreeFactory.java

package com.zking.util;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@SuppressWarnings("all")
public class TreeFactory {

    public static List<TreeNode> buildList(List<TreeNode> nodeList) {
        List<TreeNode> list = buildList(nodeList, "0");
        TreeNode root;
        if (!list.isEmpty()) {
            return list;
        } else {
            root = new TreeNode();
            root.setId("000");
            root.setParentId("-1");
            root.setHasParent(false);
            root.setHasChildren(true);
            root.setChecked(true);
            root.setChildren(list);
            root.setText("主菜单");
            root.setState("closed");
        }
        return Arrays.asList(root);
    }

    public static List<TreeNode> buildList(List<TreeNode> nodeList, String topMenuId) {
        return Optional.ofNullable(nodeList).map(list -> {
            list.forEach(item -> {
                list.stream().filter(i -> {
                    return i.getId().equals(item.getParentId());
                }).forEach(i -> {
                    i.setHasChildren(Boolean.TRUE);
                    i.getChildren().add(item);
                });
            });
            return list.stream().filter(i -> {
                return i.getParentId().equals(topMenuId);
            }).collect(Collectors.toList());
        }).get();
    }

}

TreeNode.java

package com.zking.util;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class TreeNode {

    private String id;
    private String text;
    private String state;
    private Boolean checked = false;
    private Map<String, Object> attributes=new HashMap<>();
    private List<TreeNode> children = new ArrayList<>();
    private String parentId;
    private Boolean hasParent = false;
    private Boolean hasChildren = false;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getState() {
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
	public Boolean getChecked() {
		return checked;
	}
	public void setChecked(Boolean checked) {
		this.checked = checked;
	}
	public Map<String, Object> getAttributes() {
		return attributes;
	}
	public void setAttributes(Map<String, Object> attributes) {
		this.attributes = attributes;
	}
	public List<TreeNode> getChildren() {
		return children;
	}
	public void setChildren(List<TreeNode> children) {
		this.children = children;
	}
	public String getParentId() {
		return parentId;
	}
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}
	public Boolean getHasParent() {
		return hasParent;
	}
	public void setHasParent(Boolean hasParent) {
		this.hasParent = hasParent;
	}
	public Boolean getHasChildren() {
		return hasChildren;
	}
	public void setHasChildren(Boolean hasChildren) {
		this.hasChildren = hasChildren;
	}
	public TreeNode(String id, String text, String state, Boolean checked, Map<String, Object> attributes,
			List<TreeNode> children, String parentId, Boolean hasParent, Boolean hasChildren) {
		super();
		this.id = id;
		this.text = text;
		this.state = state;
		this.checked = checked;
		this.attributes = attributes;
		this.children = children;
		this.parentId = parentId;
		this.hasParent = hasParent;
		this.hasChildren = hasChildren;
	}

    public TreeNode() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "TreeNode [id=" + id + ", text=" + text + ", state=" + state + ", checked=" + checked + ", attributes="
				+ attributes + ", children=" + children + ", parentId=" + parentId + ", hasParent=" + hasParent
				+ ", hasChildren=" + hasChildren + "]";
	}
    
    
}

DBHelper.java 

package com.zking.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


/**
 * 数据库驱动类
 * @author zjjt
 *
 */
public class DBHelper {

	//定义链接字符串
    private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";

    //加载驱动
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获得链接
    public static Connection getCon() {
        try {
            return DriverManager.getConnection(URL, "scott", "123123");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //关闭资源
    public static void close(Connection con, PreparedStatement ps, ResultSet rs) {
        try {
            if (con != null && !con.isClosed()) {
                con.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (rs != null) {
                rs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  Permission.java

package com.zking.pojo;

public class Permission {

	    private Integer id;
	    private Integer pid;
	    private String text;
	    private String url;
		public Integer getId() {
			return id;
		}
		public void setId(Integer id) {
			this.id = id;
		}
		public Integer getPid() {
			return pid;
		}
		public void setPid(Integer pid) {
			this.pid = pid;
		}
		public String getText() {
			return text;
		}
		public void setText(String text) {
			this.text = text;
		}
		public String getUrl() {
			return url;
		}
		public void setUrl(String url) {
			this.url = url;
		}
		public Permission(Integer id, Integer pid, String text, String url) {
			super();
			this.id = id;
			this.pid = pid;
			this.text = text;
			this.url = url;
		}

	    public Permission() {
			// TODO Auto-generated constructor stub
		}
		@Override
		public String toString() {
			return "Permission [id=" + id + ", pid=" + pid + ", text=" + text + ", url=" + url + "]";
		}
	    
	    
}

IPermissionDao .java 

package com.zking.dao;

import java.util.List;

import com.zking.pojo.Permission;
import com.zking.util.TreeNode;

public interface IPermissionDao {

	List<Permission>list();
	List<TreeNode>listNodes();
}

PermissionDaoImpl.java 

package com.zking.dao.impl;

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

import com.zking.dao.IPermissionDao;
import com.zking.pojo.Permission;
import com.zking.util.DBHelper;
import com.zking.util.TreeFactory;
import com.zking.util.TreeNode;

public class PermissionDaoImpl implements IPermissionDao{

	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;
	
	
	/**
	 * 查询所有permission
	 * @return
	 */
	 public List<Permission> list() {
	        List<Permission> list = new ArrayList<Permission>();
	        try {
	            con = DBHelper.getCon();
	            ps = con.prepareStatement("select * from bs_permission");
	            rs = ps.executeQuery();
	            while (rs.next()) {
	                Permission permission = new Permission();
	                permission.setId(rs.getInt(1));
	                permission.setPid(rs.getInt(2));
	                permission.setText(rs.getString(3));
	                permission.setUrl(rs.getString(4));
	                list.add(permission);
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            DBHelper.close(con, ps, rs);
	        }
	        return list;
	    }
	 
	   public List<TreeNode> listNodes() {
	        List<TreeNode> nodes = new ArrayList<TreeNode>();
	        //数据库中
	        List<Permission> list = list();
	        //将permission封装成node
	        for (Permission permission : list) {
	        
	            TreeNode node = new TreeNode();
	            node.setId(String.valueOf(permission.getId()));
	            node.setParentId(String.valueOf(permission.getPid()));
	            node.setText(permission.getText());
	            //把pid放到自定义属性中
	            node.getAttributes().put("pid",permission.getPid());
	            //把url放到自定义属性中
	            node.getAttributes().put("url",permission.getUrl());
	            nodes.add(node);
	        }
	        return TreeFactory.buildList(nodes, "0");
	    }
		
}

IPermissionBiz.java

package com.zking.biz;

import java.util.List;

import com.zking.pojo.Permission;
import com.zking.util.TreeNode;

public interface IPermissionBiz {

	List<Permission>list();
	List<TreeNode>listNodes();
}

PermissionBizImpl.java 

package com.zking.biz.impl;

import java.util.List;

import com.zking.biz.IPermissionBiz;
import com.zking.dao.IPermissionDao;
import com.zking.dao.impl.PermissionDaoImpl;
import com.zking.pojo.Permission;
import com.zking.util.TreeNode;

public class PermissionBizImpl implements IPermissionBiz{

	private IPermissionDao permissionDao=new PermissionDaoImpl();
	@Override
	public List<Permission> list() {
		return permissionDao.list();
	}

	@Override
	public List<TreeNode> listNodes() {
	
		return permissionDao.listNodes();
	}

}

数据库建表语句 

CREATE TABLE bs_permission
(
    id   number          DEFAULT NULL,
    pid  number          DEFAULT NULL,
    text varchar2(10) DEFAULT NULL,
    url  varchar2(255) DEFAULT NULL
);

create sequence seq_permission;

insert into bs_permission values(seq_permission.nextval,0,'会员管理','');
insert into bs_permission values(seq_permission.nextval,0,'商品管理','');
insert into bs_permission values(seq_permission.nextval,0,'订单管理','');
insert into bs_permission values(seq_permission.nextval,0,'数据报表','');
insert into bs_permission values(seq_permission.nextval,0,'系统管理','');

insert into bs_permission values(seq_permission.nextval,2,'会员卡充值','recharge.jsp');
insert into bs_permission values(seq_permission.nextval,2,'会员等级','level.jsp');
insert into bs_permission values(seq_permission.nextval,3,'状态管理','state.jsp');
insert into bs_permission values(seq_permission.nextval,3,'类目管理','topic.jsp');
insert into bs_permission values(seq_permission.nextval,3,'评论管理','comment.jsp');

select * from bs_permission;
commit

根据数据库定的路径建好页面 


今天的分享就要这结束啦!!✌

以上就是关于easyui Tree后端工作的一些内容!!📖

期待下次再见!!😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值