用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>