基于EasyUI的基础之上实现树形功能菜单

页面展示截图如下:

基于EasyUI的基础之上实现树形功能菜单_第1张图片基于EasyUI的基础之上实现树形功能菜单_第2张图片基于EasyUI的基础之上实现树形功能菜单_第3张图片基于EasyUI的基础之上实现树形功能菜单_第4张图片


为了实现以上效果,在开始前必须先将环境配置一下。

第一步: 首先,先将 jquery-easyui-1.2.6 文件引入到工程项目下,并在jsp页面上进入引入3个jsp文件和2个css文件。如下:
 	    
	
	
	  
	
引入顺序必须按照以上顺序引入,否则页面展示效果将出错。
第二步:引入jar包,分别为:commons-beanutils-1.8.3.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar、json-lib-2.3-jdk15.jar、mysql-connector-java-5.1.17-bin.jar

代码实现

1、创建数据表

drop database easyui;
create database easyui;
use easyui;
show tables;
#创建菜单表
create table menu(
	id int(11) not null auto_increment,  ####菜单id###
	name varchar(20) default null,        ####菜单名####
	url varchar(100) default null,        #### 菜单url####
	checked varchar(10) default null,    ####菜单是否被选中
	icon varchar(30) default null,        ####菜单图标####
	parent_id int(11) default null,       ####父节点菜单的id####
	primary key(id)                          ####id是主键####           
);
#插入测试数据            ####测试数据####
insert into menu(id,name,url,checked,icon,parent_id) values
(1,'权限菜单',null,'',null,0),
(2,'用户管理',null,'0',null,1),
(3,'岗位管理',null,'',null,1),
(4,'资源管理',null,'',null,1),
(5,'用户功能1',null,'',null,2),
(6,'岗位功能1',null,'0',null,3),
(7,'资源功能2','/easyui/index.jsp','0',null,3),
(8,'资源功能1','sss','0',null,4),
(9,'岗位功能2',null,'',null,3),
(10,'资源功能3','111','0',null,4),
(11,'资源管理4','222','',null,4),
(14,'岗位功能3','dfds',null,null,3),
(17,'用户功能2','sss','0',null,2);
#查看数据
select * from menu;
//查询跟节点
select * from menu where parent_id=0;
#查看指定父节点下有哪些子节点
select * from menu where parent_id=2;

2、JDBC连接工具类

JDBCUtils.java

package com.hsj.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCUtils {
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnection() throws Exception {
		return DriverManager.getConnection(
				"jdbc:mysql:///easyui?useUnicode=true&characterEncoding=UTF-8",
				"root", "zxczxc");
	}
	public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
		try {
			if (rs != null)
				rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (ps != null)
					ps.close();
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					if (conn != null)
						conn.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}

3、创建实体类domain

Menu.java

package com.hsj.domain;
public class Menu {
	private int id;  //菜单id
	private String name;  //菜单名
	private String url;  //菜单链接的网址
	private String checked;    //菜单是否被选中
	private String icon;   //菜单图标
	private int parent_id;    //当前菜单的父节点id
	public Menu(){}
	public Menu(int id, String name, String url, String checked, String icon,int parentId) {
		this.id = id;
		this.name = name;
		this.url = url;
		this.checked = checked;
		this.icon = icon;
		parent_id = parentId;
	}
	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 String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getChecked() {
		return checked;
	}
	public void setChecked(String checked) {
		this.checked = checked;
	}
	public String getIcon() {
		return icon;
	}
	public void setIcon(String icon) {
		this.icon = icon;
	}
	public int getParent_id() {
		return parent_id;
	}
	public void setParent_id(int parentId) {
		parent_id = parentId;
	}
}

TreeDTD.java

package com.hsj.domain;
import java.util.HashMap;
import java.util.Map;
public class TreeDTO {
	private int id;
	private String text;
	private String iconCls;
	private String checked;
	private int parent_id;
	private String state;
	/**
	 * 自定义属性信息
	 */
	private Map attributes = new HashMap();
	public TreeDTO() {
	}
	public TreeDTO(int id, String text, String iconCls, String checked,
			int parent_id, String state, Map attributes) {
		this.id = id;
		this.text = text;
		this.iconCls = iconCls;
		this.checked = checked;
		this.parent_id = parent_id;
		this.state = state;
		this.attributes = attributes;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getIconCls() {
		return iconCls;
	}
	public void setIconCls(String iconCls) {
		this.iconCls = iconCls;
	}
	public String getChecked() {
		return checked;
	}
	public void setChecked(String checked) {
		this.checked = checked;
	}
	public int getParent_id() {
		return parent_id;
	}
	public void setParent_id(int parentId) {
		parent_id = parentId;
	}
	public String getState() {
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
	public Map getAttributes() {
		return attributes;
	}
	public void setAttributes(Map attributes) {
		this.attributes = attributes;
	}
	@Override
	public String toString() {
		return "TreeDTO [attributes=" + attributes + ", checked=" + checked
				+ ", iconCls=" + iconCls + ", id=" + id + ", parent_id="
				+ parent_id + ", state=" + state + ", text=" + text + "]";
	}
}

4、创建接口DAO

MeunDao.java

package com.hsj.dao;
import java.util.List;
import com.hsj.domain.Menu;
import com.hsj.domain.TreeDTO;
public interface MenuDao{
	/**
	 * 根据父节点的值查询所有的子节点
	 * @param parentId
	 * @return
	 */
	public List getChildrenByParentId(String parentId);
	/**
	 * 根据id值查询当前对象
	 * @param id
	 * @return
	 */
	public Menu findMenuById(int id);
	
	/**
	 * 保存指定对象
	 * @param 
	 * @param t
	 */
	public  void save(T t);
	
	/**
	 * 修改菜单对象
	 * @param menu
	 */
	public void update(Menu menu);
	
	/**
	 * 根据id删除指定对象
	 * @param id
	 */
	public void delete(int id);
	
	/**
	 * 根据父节点删除当前父节点下所有的子节点
	 * @param parentId 父节点id
	 */
	public void deleteChildrenByParentId(int parentId);
	
	/**
	 * 根据当前节点 的id值删除它的所有子节点
	 * @param id
	 */
	 public void deleteChildren(int id);
}

5、实现DAO接口方法Bean

MenuDaoBean.java

package com.hsj.dao.bean;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.hsj.dao.MenuDao;
import com.hsj.domain.Menu;
import com.hsj.domain.TreeDTO;
import com.hsj.utils.JDBCUtils;
public class MenuDaoBean implements MenuDao{

	public  int getTotalRecord(Class clazz) {
		// TODO Auto-generated method stub
		return 0;
	}
	public  void save(T t)
	{
		//1.根据对象得到类模板对象
		Class clazz= (Class) t.getClass();
		//2.得到当前类中所有字段组成的数组,不管访问权限如何,但不包括父类中的字段
		Field[]  fields=clazz.getDeclaredFields();
		//insert into t_menu(field1,field2,....) values(value1,value2,....)
		List key=new ArrayList();//key用来存储字段列表
		List value=new ArrayList();//value用来存储值列表
		
		String methodName=null;
		Method method=null;
		for(int i=0;i0)
			{
				for(int i=0;i getChildrenByParentId(String parentId) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List menus=new ArrayList();
		List treeDTOS=new ArrayList();
		try
		{
			String sql="";
		    if(parentId==null || "".equals(parentId))
		    {
		    	sql="select * from menu where parent_id=0";
		    }else{
		    	sql="select * from menu where parent_id="+parentId;
		    }
			conn=JDBCUtils.getConnection();
			ps=conn.prepareStatement(sql);
			rs=ps.executeQuery();
			while(rs.next())
			{
				 Menu menu=new Menu();
				 menu.setId(rs.getInt("id"));
				 menu.setIcon(rs.getString("icon"));
				 menu.setUrl(rs.getString("url"));
				 menu.setChecked(rs.getString("checked"));
				 menu.setName(rs.getString("name"));
				 menu.setParent_id(rs.getInt("parent_id"));
				 menus.add(menu);
			}
			
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.close(rs, ps, conn);
		}
		
		for(Menu m : menus)
		{
			TreeDTO td=new TreeDTO();
			td.setId(m.getId());
			td.setText(m.getName());
			td.setChecked(m.getChecked());
			td.setIconCls(m.getIcon());
			td.setParent_id(m.getParent_id());
			List childrenList=getChildren(m.getId());
			if(childrenList.size()>0)
			{
				td.setState("closed");
			}else{
				td.setState("open");
			}
			Map attributes=new HashMap();
			attributes.put("url", m.getUrl());
			td.setAttributes(attributes);
			treeDTOS.add(td);
		}
		return treeDTOS;
	}
	
	/**
	 * 根据当前菜单的主键值找到当前菜单有哪些子菜单对象组成的集合并返回
	 * @param id
	 * @return
	 */
	public List getChildren(int id)
	{
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List menus=new ArrayList();
		try
		{
			conn=JDBCUtils.getConnection();
			ps=conn.prepareStatement("select * from menu where parent_id="+id);
			rs=ps.executeQuery();
			while(rs.next())
			{
				 Menu menu=new Menu();
				 menu.setId(rs.getInt("id"));
				 menu.setIcon(rs.getString("icon"));
				 menu.setUrl(rs.getString("url"));
				 menu.setChecked(rs.getString("checked"));
				 menu.setName(rs.getString("name"));
				 menu.setParent_id(rs.getInt("parent_id"));
				 menus.add(menu);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}finally{
			JDBCUtils.close(rs, ps, conn);
		}
		return menus;
	}

	/**
	 * 根据菜单的主键查找当前菜单对象
	 */
	public Menu findMenuById(int id) {
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Menu menu=null;
		try
		{
			conn=JDBCUtils.getConnection();
			ps=conn.prepareStatement("select * from menu where id="+id);
			rs=ps.executeQuery();
			if(rs.next())
			{
				 menu=new Menu();
				 menu.setId(rs.getInt("id"));
				 menu.setIcon(rs.getString("icon"));
				 menu.setUrl(rs.getString("url"));
				 menu.setChecked(rs.getString("checked"));
				 menu.setName(rs.getString("name"));
				 menu.setParent_id(rs.getInt("parent_id"));
				 
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}finally{
			JDBCUtils.close(rs, ps, conn);
		}
		return menu;
	}

	public void update(Menu menu) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try
		{
			conn=JDBCUtils.getConnection();
			ps=conn.prepareStatement("update menu set name=?,url=?,checked=?,icon=?,parent_id=? where id=?");
			ps.setString(1, menu.getName());
			ps.setString(2, menu.getUrl());
			ps.setString(3, menu.getChecked());
			ps.setString(4, menu.getIcon());
			ps.setInt(5, menu.getParent_id());
			ps.setInt(6, menu.getId());
			ps.executeUpdate();
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}finally{
			JDBCUtils.close(rs, ps, conn);
		}
		
	}

	/**
	 * 根据主键删除当前菜单对象
	 */
	public void delete(int  id) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try
		{
			conn=JDBCUtils.getConnection();
			ps=conn.prepareStatement("delete from menu  where id="+id);
			ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}finally{
			JDBCUtils.close(rs, ps, conn);
		}
	}
	
	/**
	 * 根据当前菜单的主键值删除当前菜单的所有子菜单及当前菜单对象
	 */
    public void deleteChildren(int id)
    {
    	List menus=getChildren(id);
    	for(int i=0;i 
     

6、创建Servlet 并配置映射文件

MenuServlet.java


package com.hsj.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import com.hsj.dao.MenuDao;
import com.hsj.dao.bean.MenuDaoBean;
import com.hsj.domain.Menu;
import com.hsj.domain.TreeDTO;
public class MenuServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String method = request.getParameter("method");
		if (method != null && !"".equals(method) && "getMenu".equals(method)) {
			getMenu(request, response);
		} else if (method != null && !"".equals(method)
				&& "changeMenu".equals(method)) {
			changeMenu(request, response);
		} else if (method != null && !"".equals(method)
				&& "addMenu".equals(method)) {
			addMenu(request, response);
		} else if (method != null && !"".equals(method)
				&& "updateMenu".equals(method)) {
			updateMenu(request, response);
		} else if (method != null && !"".equals(method)
				&& "deleteMenu".equals(method)) {
			deleteMenu(request, response);
		}
		out.flush();
		out.close();
	}
	/**
	 * 删除当前菜单及其当前菜单的所有子菜单
	 * @param request
	 * @param response
	 */
	private void deleteMenu(HttpServletRequest request,
			HttpServletResponse response) {
		String id=request.getParameter("id");
		MenuDao menuDao=new MenuDaoBean();
		System.out.println(id);
		menuDao.deleteChildren(Integer.valueOf(id));
		
	}
	/**
	 * 修改菜单
	 * @param request
	 * @param response
	 */
	private void updateMenu(HttpServletRequest request,
			HttpServletResponse response) {
		String id=request.getParameter("id");
		String name=request.getParameter("name");
		String url=request.getParameter("url");
		MenuDao menuDao=new MenuDaoBean();
		Menu menu=menuDao.findMenuById(Integer.valueOf(id));
		menu.setName(name);
		menu.setUrl(url);
		menuDao.update(menu);
	}
	/**
	 * 添加菜单
	 * @param request
	 * @param response
	 */
	private void addMenu(HttpServletRequest request,HttpServletResponse response) {
		
		String parentId=request.getParameter("parentId");
		String name=request.getParameter("name");
		String url=request.getParameter("url");
		Menu menu=new Menu();
		menu.setName(name);
		menu.setUrl(url);
		menu.setParent_id(Integer.valueOf(parentId));
		MenuDao menuDao=new MenuDaoBean();
		menuDao.save(menu);
	}
	/**
	 * 菜单菜单的父菜单
	 * @param request
	 * @param response
	 */
	private void changeMenu(HttpServletRequest request,
			HttpServletResponse response) {
		    String targetId= request.getParameter("targetId");
		    String sourceId= request.getParameter("sourceId");
		    String point= request.getParameter("point");
		    System.out.println("point="+point);
		    MenuDao menuDao=new MenuDaoBean();
		    Menu target= menuDao.findMenuById(Integer.valueOf(targetId));
		    Menu source= menuDao.findMenuById(Integer.valueOf(sourceId));
		    if("append".equals(point))
		    {	
		    	//源菜单作为目标菜单的子菜单
		    	source.setParent_id(target.getId());
		    }else{
		    	//源菜单和目标菜单使用相同的父菜单的id值
		    	source.setParent_id(target.getParent_id());
		    }
		    menuDao.update(source);
	}
	/**
	 * 根据父id得到它所有的子菜单
	 * @param request
	 * @param response
	 */
	private void getMenu(HttpServletRequest request,HttpServletResponse response) {
		System.out.println("getMenu-------");
		//获取当前展的节点的id
		try {
			String parentId=request.getParameter("id");
			MenuDao menuDao=new MenuDaoBean();
			List treeDTOS=menuDao.getChildrenByParentId(parentId);
			System.out.println(treeDTOS.toString());
			response.setContentType("text/html;charset=utf-8");
			
			String json=JSONArray.fromObject(treeDTOS).toString();
			response.getWriter().write(json);
			System.out.println("json="+json);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

映射文件信息:

Web.xml




 
    MenuServlet
    com.hsj.servlet.MenuServlet
  

  
    MenuServlet
    /menuServlet
  
   
  
    index.jsp
  
  

7、JSP网页代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


  
    
    tree的使用
        
	
	
	  
	
	

  
  
  
    
Append
Editor
Remove
    名称:
    url:










    你可能感兴趣的:(架构设计,jsp)