用Hibernate+Struts+Spring做了一个简单的树形菜单..通过dtree.js组件显示树形菜单。
具体Sql代码以及java后台的实现代码都贴出来.以供参考..
数据库表的代码:
--权限涉及的如下五个表; drop table roles; drop table user_roles; drop table menus; drop table rols_menus; drop table users;
--用户表; create table users( --主键, userid number primary key not null, username varchar2(50)not null, userpass varchar2(20)not null, --外键,所属部门; deptid number not null, --生日; birthday date not null, sex varchar2(4)not null, age number not null, --手机; combine varchar2(11)null, email varchar2(50)null, address varchar2(50)null, zipcode varchar2(8)null, remark varchar2(50)null, --创建users表的所属部门的外键; foreign key(deptid) references dept(deptid) ) --创建序列; drop sequence seq_users; create sequence seq_users; insert into users values(seq_users.nextval,'周海涛','123456',1,sysdate,'男',21,'13973312067','[email protected]','湖南株洲县','412109','暂无备注');
--创建角色表; create table roles( rolesid number primary key not null, --主键角色编号; rolename varchar2(20)not null --角色名称; ) drop sequence seq_roles; create sequence seq_roles; insert into roles values(seq_roles.nextVal,'管理员'); insert into roles values(seq_roles.nextVal,'程序员'); insert into roles values(seq_roles.nextVal,'项目经理'); insert into roles values(seq_roles.nextVal,'公司总裁'); insert into roles values(seq_roles.nextVal,'副总经理'); insert into roles values(seq_roles.nextVal,'前台接待'); insert into roles values(seq_roles.nextVal,'产品销售'); insert into roles values(seq_roles.nextVal,'普通用户');
--用户角色中间表; create table user_roles( urId number references users(userid), --<外键>用户编号; rolesid number references roles(rolesid) --<外键>角色编号; ); insert into user_roles values(1,1); insert into user_roles values(2,2); insert into user_roles values(3,3); insert into user_roles values(4,4); insert into user_roles values(5,8);
--菜单表; create table menus( menusid number primary key not null, --菜单编号; menusname varchar2(20)not null, --菜单姓名; menusparent number not null, --父菜单编号; menusurl varchar2(150) null, --菜单链接; isshow number not null --是否显示; ) drop sequence seq_menus; create sequence seq_menus; --'-1'代表根目录 ; --1代表根目录下; 2--代表1的跟目下, --3代表-同级目录; insert into menus values(seq_menus.nextVal,'功能菜单',-1,'',1); insert into menus values(seq_menus.nextVal,'系统管理',1,'',1); insert into menus values(seq_menus.nextVal,'用户管理',2,'',1); insert into menus values(seq_menus.nextVal,'考勤管理',3,'',1); insert into menus values(seq_menus.nextVal,'个人设置',3,'',1); insert into menus values(seq_menus.nextVal,'短信管理',3,'',1); insert into menus values(seq_menus.nextVal,'通讯录管理',3,'',1); insert into menus values(seq_menus.nextVal,'权限管理',3,'',1); insert into menus values(seq_menus.nextVal,'公告管理',3,'',1); insert into menus values(seq_menus.nextVal,'考勤查询',4,'timecard.do?p=findtimecardSelect',1); insert into menus values(seq_menus.nextVal,'外出查询',4,'timecard.do?p=findpersonoutqin',1); insert into menus values(seq_menus.nextVal,'上班考勤',4,'timecard.do?p=kaoqin',1); insert into menus values(seq_menus.nextVal,'外出登记',4,'timecard.do?p=goout',1); insert into menus values(seq_menus.nextVal,'密码修改',5,'geRenSheZhi.do?p=mimaxiugai',1); insert into menus values(seq_menus.nextVal,'用户资料',5,'geRenSheZhi.do?p=yonghuziliao',1); insert into menus values(seq_menus.nextVal,'查看用户',5,'geRenSheZhi.do?p=chakanyonghu',1); insert into menus values(seq_menus.nextVal,'发送短信',6,'shortmessage.do?p=fasongduanxin',1); insert into menus values(seq_menus.nextVal,'已收短信',6,'shortmessage.do?p=yishouduanxin',1); insert into menus values(seq_menus.nextVal,'已发短信',6,'shortmessage.do?p=yifaduanxinxi',1); insert into menus values(seq_menus.nextVal,'添加联系人',7,'linkman.do?p=tianjiailianxiren',1); insert into menus values(seq_menus.nextVal,'添加新类型',7,'linkman.do?p=insertNewType',1); insert into menus values(seq_menus.nextVal,'删除联系人',7,'linkman.do?p=shanchulianxiren',1); insert into menus values(seq_menus.nextVal,'查找联系人',7,'linkman.do?p=chazhaolianxiren',1); insert into menus values(seq_menus.nextVal,'查询权限',8,'popedom.do?p=select_grant',1); insert into menus values(seq_menus.nextVal,'添加权限',8,'popedom.do?p=insert_grant',1); insert into menus values(seq_menus.nextVal,'修改权限',8,'popedom.do?p=update_grant',1); insert into menus values(seq_menus.nextVal,'发送公告',9,'proclaim.do?p=send_proclaim',1); insert into menus values(seq_menus.nextVal,'已发公告',9,'proclaim.do?p=alreadysend',1); insert into menus values(seq_menus.nextVal,'公告待审',9,'proclaim.do?p=proclaim_cognizance',1); insert into menus values(seq_menus.nex tVal,'已收公告',9,'proclaim.do?p=receipt_receipt',1);
--角色菜单中间表; create table rols_menus( rolesid number references roles(rolesid), --<外键>角色编号; menusid number references menus(menusid) --<外键>菜单编号; ) drop sequence seq_rols_menus; create sequence seq_rols_menus; insert into rols_menus values(1,1); insert into rols_menus values(1,2); insert into rols_menus values(1,3); insert into rols_menus values(1,4); insert into rols_menus values(1,5); insert into rols_menus values(1,6); insert into rols_menus values(1,7); insert into rols_menus values(1,8); insert into rols_menus values(1,9); insert into rols_menus values(1,10); insert into rols_menus values(1,11); insert into rols_menus values(1,12); insert into rols_menus values(1,13); insert into rols_menus values(1,14); insert into rols_menus values(1,15); insert into rols_menus values(1,16); insert into rols_menus values(1,17); insert into rols_menus values(1,18); insert into rols_menus values(1,19); insert into rols_menus values(1,20); insert into rols_menus values(1,21); insert into rols_menus values(1,22); insert into rols_menus values(1,23); insert into rols_menus values(1,24); insert into rols_menus values(1,25); insert into rols_menus values(1,26); insert into rols_menus values(1,27); insert into rols_menus values(1,28); insert into rols_menus values(1,29); insert into rols_menus values(1,30); insert into rols_menus values(4,1); insert into rols_menus values(4,2); insert into rols_menus values(4,3); insert into rols_menus values(4,4); insert into rols_menus values(4,5); insert into rols_menus values(4,6); insert into rols_menus values(4,7); insert into rols_menus values(4,10); insert into rols_menus values(4,11); insert into rols_menus values(4,12); insert into rols_menus values(4,15); insert into rols_menus values(4,16); insert into rols_menus values(4,17); insert into rols_menus values(4,18); insert into rols_menus values(4,19);
BaseDAO中的查询方法.
/** * 分页查找; * @param hql * @param page * @param size * @param objects * @return */ public List pageQuery(final String hql,final Integer page,final Integer size,final Object...objects){ return super.getHibernateTemplate().executeFind(new HibernateCallback(){ //一个匿名内部类; public Object doInHibernate(Session session) throws HibernateException, SQLException { // TODO Auto-generated method stub Query query=session.createQuery(hql); if(objects!=null){ for(int i=0;i<objects.length;i++){ query.setParameter(i, objects[i]); } } if(page!=null&& size!=null){ query.setFirstResult((page-1)*size).setMaxResults(size); } return query.list(); } }); }
service中的方法,根据用户名获取所有菜单;
/** * 根据用户名得到菜单 */ public Set selectByName(String name) { // TODO Auto-generated method stub String hql="From Menus as M join fetch M.roleses R join fetch R.userses U where U.username=?"; List list=iuser.pageQuery(hql, null, null,name); //把list转成set集合; Set set=new HashSet(list); return set; }
在Action中. 调用service中的方法。根据用户查找得到菜单;保存到session中。
Set menus=iser.selectByName(name); System.out.println("菜单项:"+menus); //把菜单项设置到session中; request.getSession().setAttribute("MeunsList",menus);
在JSP也页面使用dTree的方式是:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <script type="text/javascript" src="dtree/dtree.js"></script> <link rel="styleSheet" href="dtree/dtree.css" type="text/css"/> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>左边的框架页面</title> <!-- 定义树 --> <script> var d=new dTree('d'); d.config.check=false; //没有复选框 d.config.useIcons =true //有图片; </script> <style type="text/css"> *{ font-size:12px; color:black; } </style> </head> <body> <form method="post" name="myform"> <center> </center> <!-- 遍历,添加节点; --> <c:forEach items="${MeunsList}" var="m"> <script> //自己的菜单编号,父节点编号,名称,链接,提示,显示位置 d.add(${m.menusid},${m.menusparent},'${m.menusname}','${m.menusurl}','欢迎使用OA办公管理系统!','right'); </script> </c:forEach> <!--显示树--> <script> document.write(d); d.openAll(); </script> </form> </body> </html>