系统维护模块-数据字典
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广州大学华软软件学院毕业论文(设计)
课题名称
学院华软软件学院
系别软件工程系
专业班级
学生姓名
学号
指导教师
日期2011年03月29日
摘要:我们现在已经有了“每个周都交上个周报·与老师保持沟通等等”的条件。
只是在这个条件的基础上开发了这个系统,帮助了老师,不用手动整理word文档,占空间存档.
无纸化办公将人从繁琐、无序、低端的工作中解放出来从事核心事务,整体提高了单位办事效率和对信息的可控性,降低办公成本,提高执行力,使管理趋于完善。
基于无纸办公的思想,提出当前的毕业班学生实习在外实习情况无法及时反馈给实习知道老师的问题。
设计了本课题的高校专业实习管理系统。
本课题,围绕着周报为中心,解决了学生实习的情况的全面记录与跟踪,便于指导老师针对学生遇到的具体问题给予指导以及评定毕业实习成绩。
提高了实习生的实习质量,提高了教学的质量。
关键词:MVC;RBAC;周报;
Abstract, We now have a "hand in each week is a weekly • maintain communication with teachers, etc." conditions. Only in this condition based on the development of this system to help the teacher, without having to manually organize word document, archive space.
Paperless office will be from the tedious, disorder, low-end work in the liberation of core business units of the overall improvement of the efficiency and controllability of information, reduce business costs, improve execution, so that the management tends to improve.
Thoughts on the paperless office, proposed the current graduating student can not practice outside the Practice of timely feedback to the teacher training that problem. University of the topic designed professional practice management system. The topic centered around weekly to address the situation of students comprehensive training records and track, the instructor for students to facilitate the specific problems encountered in assessing graduation practice guidance and results. Improve the quality of intern training to improve the quality of teaching.
Keywords,MVC; RBAC;Weekly
目录
前言 (6)
第1章系统分析 (7)
1.1系统设计目的 (7)
1.2功能简介 (7)
1.3系统需求 (7)
1.3.1功能需求 (7)
1.3.2性能需求: (8)
1.4用例分析 (9)
1.4.1登陆管理用例 (9)
1.4.2主程序用例: (10)
1.4.3规划总结管理用例: (11)
1.4.4突发事件管理用例: (12)
1.4.5系统管理用例: (13)
1.5运行环境 (13)
1.5.1硬件环境 (13)
1.5.2软件环境 (14)
第2章数据库设计 (15)
2.1数据库设计分析 (15)
2.2数据库字典 (15)
2.2.1实习周报表 weekly_tb (15)
2.2.2实习周报内容表 weekly_info_tb (16)
2.2.3单位部门表 dept_tb (16)
2.2.4数据字典表 dict_tb (17)
2.2.5紧急事件通知表 notice_tb (17)
2.2.6操作日志表 note_tb (17)
2.2.7用户表 operator_tb (18)
2.2.8用户权限表 operator_popedom_tb (18)
2.2.9角色表 role_tb (18)
2.2.10角色权限表 role_popedom_tb (19)
第3章系统架构设计 (19)
3.1MVC模式分析 (19)
3.2Java免费开源框架的选择 (20)
3.3S2SH的整合方案 (21)
系统整体模式架构 (23)
3.4权限模型设计 (25)
第4章部分功能实现 (28)
4.1数据字典管理 (28)
4.1.1数据字典设计说明 (30)
4.1.2代码实现(Action层,Service层) (31)
4.2权限管理 (40)
4.2.1权限设计说明 (40)
4.2.2权限设计实现代码(部分) (41)
第5章性能测试 (47)
5.1测试说明 (47)
5.1.1测试平台环境如下: (47)
5.1.2主要测试业务: (47)
5.2基准测试统计 (48)
设计总结 (49)
致谢 (50)
参考文献 (51)
6符录 (52)
前言
我们现在已经有了“每个周都交上个周报·与老师保持沟通等等”的条件。
只是在这个条件的基础上开发了这个系统,帮助了老师,不用手动整理word文档,占空间存档.
无纸化办公将人从繁琐、无序、低端的工作中解放出来从事核心事务,整体提高了单位办事效率和对信息的可控性,降低办公成本,提高执行力,使管理趋于完善。
基于无纸办公的思想,提出当前的毕业班学生实习在外实习情况无法及时反馈给实习知道老师的问题。
设计了本课题的高校专业实习管理系统。
本课题,围绕着周报为中心,解决了学生实习的情况的全面记录与跟踪,便于指导老师针对学生遇到的具体问题给予指导以及评定毕业实习成绩。
提高了实习生的实习质量,提高了教学的质量。
第1章系统分析
1.1系统设计目的
解决了学生实习的情况的全面记录与跟踪,便于指导老师针对学生遇到的具体问题给予指导以及评定毕业实习成绩。
提高了实习生的实习质量,提高了教学的质量。
1.2功能简介
规划总结管理:个人周报(周报的增删改查)
信息查询:检索周报(按条件检索周报)
日常管理:审查周报(审批周报)
突发事件管理:通告管理(通告的增删改查)
系统维护:日志管理(日志增删改查),数据字典管理(数据字典增删改查)用户管理:用户角色权限管理
部门管理:部门管理
1.3系统需求
1.3.1功能需求
1.3.1.1内容管理需求:
a)周报管理:发表周报、修改周报、删除周报、查看周报、审批周报。
b)通告管理:发布通告、修改通告、删除通告、更改通过、审批通告。
c)用户管理:用户增加、用户修改、用户删除、用户查看、角色分配
d)部门管理:部门增加、部门修改、部门删除、部门查看
e)角色管理:角色增加、角色修改、角色删除、角色查看
f)功能管理:功能增加、功能修改、功能删除、功能查看
g)日志管理:日志增加、日志修改、日志删除、角色查看
h)数据字典管理:字典增加、字典修改、字典删除、字典查看
1.3.2性能需求:
1.3.
2.1响应时间与内存使用量:
忽略网络环境因素、主题模板及功能插件运作的因素,以本地测试为准。
数据库安装响应:时间2秒内,内存使用量最高上限8,000,000 bytes。
前台浏览响应时间:时间0.8秒,内存使用量最高上限9,000,000 bytes。
后台操作响应时间:时间0.9秒,内存使用量最高上限9,000,000 bytes。
1.3.
2.2数据库的优化、备份:
提供所有数据表的SQL语句备份,SQL语句的查询数据备份。
MySQL 数据库的优化处理。
1.3.
2.3安全性:
后台的界面访问、路径访问、操作执行的前后,均受登陆会话管理和用户权限管理的控制。
1.4用例分析
1.4.1登陆管理用例
图表1-1 登陆管理用例图
本用例允许用户登陆管理相关的内容,进行登陆、注销、修改密码等基本操作。
1.4.2主程序用例:
图表1-2 主程序一级用例图
用户进行登陆认证后,在进行规划总结管理,突发事件管理,系统管理,用户管理等方面前验证用户权限,才能执行相关操作。
1.4.3规划总结管理用例:
a)周报管理者(指导老师可以审批,指导老师的上一级都可以查看但不得
审批,指导老师的同级管理者不得查看)
b)周报每周填一次。
c)一旦周报审批通过,实习学生不得修改删除该篇周报。
1.4.4突发事件管理用例:
图表1-4 评论管理用例图
a)通告发布
1.4.5系统管理用例:
图表1-5 系统管理用例图
a)系统管理者包含(用户管理者,日常操作管理者,系统维护管理着),
b)用户管理者管理用户角色功能部门
c)日常管理者维护日常操作日志和数据字典。
1.5运行环境
1.5.1硬件环境
a)服务器端:
服务器端的最低配置是由建立站点所需的软件来决定的,在最低配置的情况下,服务器的性能往往不尽人意,现在硬件性能已经相当出色,而且价格也很便宜,因此通常应给服务器端配置高性能硬件。
本网络系统服务器端的配置如下:
处理器:Inter Pentium(Celeron) 4 2.4GHz 或更高。
内存:512MB
硬盘空间:60G
显卡:SVGA显示适配器
b)客户端:
因为客户端主要用于浏览和操作数据,所以对客户端的硬件要求不高,不过现在的电脑有很高的性价比,因此需要的配置应该高于下面的配
置:
处理器:Inter Pentium(Celeron) 4 1.6GHz 或更高。
内存:32MB
硬盘空间:1GB
显卡:SVGA显示适配器
1.5.2软件环境
a)服务器端:
操作系统:Windows NT/2000/2003/XP professional或Linux 2.6.4 .etc 网站服务器:tomcat
数据库管理系统:MySQL5.x
b)用户端:
操作系统:Windows NT/2000/2003/XP professional或Linux 2.6.4 .etc
第2章数据库设计2.1数据库设计分析
各数据表描述
表格2-1 数据表描述
名词和符号定义
1. ‘*’:主关键字符号;
2. ‘PK’:主关键字缩写;
3. ‘+’:外关键字符号;
4. ‘FK’:外关键字缩写;
5. ‘&’:复合关键字符号;
6. ‘CPK’:复合关键字缩写;
7. ‘UNIQUE’:唯一索引;
2.2数据库字典
2.2.1实习周报表 weekly_tb
表格 2-2 weekly_tb表
2.2.2实习周报内容表 weekly_info_tb
表格 2-3 weekly_info_tb表
2.2.3单位部门表 dept_tb
表格 2-4 dept_tb表
2.2.4数据字典表 dict_tb
表格 2-5 dict_tb表2.2.5紧急事件通知表 notice_tb
表格 2-6 notice_tb表2.2.6操作日志表 note_tb
表格 2-7 note_tb表
2.2.7用户表 operator_tb
表格 2-8 operator_tb表2.2.8用户权限表 operator_popedom_tb
表格 2-9 operator_popedom_tb表2.2.9角色表 role_tb
表格 2-10 role_tb表
2.2.10角色权限表 role_popedom_tb
表格 2-11 role_popedom_tb表
第3章系统架构设计
3.1MVC模式分析
使用像ASP,PHP,或者CFML这样的基于过程化开发的语言来开发一般的Web 应用程序,它们的输入、处理和输出都不能很好的进行分离,因而很难体现出业务模型和业务重用性,以至于代码难以结构混乱和难以维护。
虽然有经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。
MVC从根本上强制性的将它们分开。
MVC是一种将应用程序的逻辑层和表现层进行分离的方法。
Codeigniter(后简称CI)是基于模型-视图-控制器这一设计模式的。
本系统采用CI框架下的MVC 开发模式。
∙模型(Model)代表你的数据结构。
通常来说,你的模型类将包含取出、插入、更新你的数据库资料这些功能。
∙视图(View)是展示给用户的信息。
一个视图通常是一个网页,但是在 CI 中,一个视图也可以是一个页面片段,如页头、页尾。
∙控制器(Controller)是模型、视图以及其它任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。
MVC三层模式的好处显而易见,首当其冲就是模型重性能很好地发挥,因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。
由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。
MVC有它的优点同时,我对MVC的模式开发有自己的一点看法,由于它没有明确的定义,所以完全理解MVC并不是很容易。
使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。
同时在抽象出业务处理的模型时,虽然能够屏蔽掉其它层次不相关的处理细节,但也限制了与之相关的功能扩展。
或者可以根据MVC分离式设计,经由修改内部代码来扩展功能和业务,但好的扩展性是体现在添加而不是修改上。
需求总是会变的,若要扩展业务或功能时,开放人员就不得不重新在模型里面添加代码甚至改变内部结构以适应新的需求。
3.2Java免费开源框架的选择
Spring
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。
Spring 提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。
Spring的架构基础是基于使用JavaBean属性的Inversion of Control 容器。
然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。
Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。
Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。
Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。
Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。
这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。
Spring 还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。
STRUCTS
Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP 技术来实现的。
由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,
在过去的一年中颇受关注。
Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。
Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Jquery
Jquery是继prototype之后又一个优秀的Javascrīpt框架。
它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。
jQuery使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。
jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。
jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。
3.3S2SH的整合方案
1.首先创建一个web工程,
2.向工程加入hibernate支持,这里我们使用的是hibernate
3.2
图3-1 加入Hibernate工程3.向工程加入spring支持,这里我们使用的是spring3.0
图3-2 加入Spring工程
选中这5个库包:
Spring 3.0 AOP Libraries
Spring 3.0 Core Libraries
Spring 3.0 Persistence Core Libraries
Spring 3.0 Persistence JDBC Libraries
Spring 3.0 Web Libraries
也不要忘记将jar包加入到/WebRoot/WEB-INF/lib。
4.加入struts2支持
图3-3 加入Struts工程系统整体模式架构
图3-4 MVC-Struts、Spring、Hibernate框架图
图3-5 S2SH整合框架图
3.4权限模型设计
RBAC支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则。
最小权限原则之所以被RBAC所支持,是因为RBAC可以将其角色配置成其完成任务所需要的最小的权限集。
责任分离原则可以通过调用相互独立互斥的角色来共同完成敏感的任务而体现,比如要求一个计帐员和财务管理员共参与同一过帐。
数据抽象可以通过权限的抽象来体现,如财务操作用借款、存款等抽象权限,而不用操作系统提供的典型的读、写、执行权限。
然而这些原则必须通过RBAC 各部件的详细配置才能得以体现。
RBAC有许多部件,这使得RBAC的管理多面化。
尤其是,我们要分割这些问题来讨论:用户与角色的指派;角色与权限的指派;为定义角色的继承进行的角色与角色的指派。
这些活动都要求把用户和权限联系起来。
然而在很多情况下它们最好由不同的管理员或管理角色来做。
对角色指派权限是典型的应用管理者的职责。
银行应用中,把借款、存款操作权限指派给出纳角色,把批准贷款操作权限指派给经理角色。
而将具体人员指派给相
应的出纳角色和管理者角色是人事管理的范畴。
角色与角色的指派包含用户与角色的指派、角色与权限的指派的一些特点。
更一般来说,角色与角色的关系体现了更广泛的策略。
(1)用户、角色、许可
基于角色访问控制的要素包括用户、角色、许可等基本定义。
在RBAC中,用户就是一个可以独立访问计算机系统中的数据或者用数据表示的其他资源的主体。
角色是指一个组织或任务中的工作或者位置,它代表了一种权利、资格和责任。
许可(特权)就是允许对一个或多个客体执行的操作。
一个用户可经授权而拥有多个角色,一个角色可由多个用户构成;每个角色可拥有多种许可,每个许可也可授权给多个不同的角色。
每个操作可施加于多个客体(受控对象),每个客体也可以接受多个操作。
图8.3 用户、角色、许可的关系
用户表(USERS)包括用户标识、用户姓名、用户登录密码。
用户表是系统中的个体用户集,随用户的添加与删除动态变化。
角色表(ROLES)包括角色标识、角色名称、角色基数、角色可用标识。
角色表是系统角色集,由系统管理员定义角色。
客体表(OBJECTS)包括对象标识、对象名称。
客体表是系统中所有受控对象的集合。
操作算子表(OPERATIONS)包括操作标识、操作算子名称。
系统中所有受控对象的操作算子构成操作算子表。
许可表(PERMISSIONS)包括许可标识、许可名称、受控对象、操作标识。
许可表给出了受控对象与操作算子的对应关系。
角色/许可授权表包括角色标识、许可标识。
系统管理员通过为角色分配或取消许可管理角色/许可授权表。
RBAC的基本思想是:授权给用户的访问权限,通常由用户在一个组织中担当的角色来确定。
RBAC中许可被授权给角色,角色被授权给用户,用户不直接
与许可关联。
RBAC对访问权限的授权由管理员统一管理,RBAC根据用户在组织内所处的角色作出访问授权与控制,授权规定是强加给用户的,用户不能自主地将访问权限传给他人,这是一种非自主型集中式访问控制方式。
例如,在医院里,医生这个角色可以开处方,但他无权将开处方的权力传给护士。
在RBAC中,用户标识对于身份认证以及审计记录是十分有用的;但真正决定访问权限的是用户对应的角色标识。
用户能够对一客体执行访问操作的必要条件是,该用户被授权了一定的角色,其中有一个在当前时刻处于活跃状态,而且这个角色对客体拥有相应的访问权限。
即RBAC以角色作为访问控制的主体,用户以什么样的角色对资源进行访问,决定了用户可执行何种操作。
ACL直接将主体和受控客体相联系,而RBAC在中间加入了角色,通过角色沟通主体与客体。
分层的优点是当主体发生变化时,只需修改主体与角色之间的关联而不必修改角色与客体的关联。
(2)角色继承
为了提高效率,避免相同权限的重复设置,RBAC采用了“角色继承”的概念。
定义了这样的一些角色,它们有自己的属性,但可能还继承其他角色的许可。
角色继承把角色组织起来,能够很自然地反映组织内部人员之间的职权、责任关系。
角色继承可以用祖先关系来表示。
如图所示,角色2是角色1的“父亲”,它包含角色1的许可。
在角色继承关系图中,处于最上面的角色拥有最大的访问权限,越下端的角色拥有的权限越小。
图8.4角色继承的实例
角色层次表包括上一级角色标识、下一级角色标识。
上一级角色能够继承下一级角色的许可。
(3)角色分配与授权
用户/角色分配表包括用户标识、角色标识。
系统管理员通过为用户分配角色、取消用户的某个角色等操作管理用户/角色分配表。
用户/角色授权表包括用户标识、角色标识、可用性。
我们称一个角色r授权给一个用户u要么是角色r分配给用户u,要么是角色r通过一个分配给用户u的角色继承而来。
用户/角色授权表记录了用户通过用户/角色分配表以及角色继承而取得的所有角色。
可用性为真时,用户才真正可以使用该角色赋予的许可。
(4)角色限制
角色限制包括角色互斥与角色基数限制。
对于某些特定的操作集,某一个用户不可能同时独立地完成所有这些操作。
角色互斥可以有静态和动态两种实现方式。
静态角色互斥:只有当一个角色与用户所属的其他角色彼此不互斥时,这个角色才能授权给该用户。
动态角色互斥:只有当一个角色与一主体的任何一个当前活跃角色都不互斥时,该角色才能成为该主体的另一个活跃角色。
静态互斥角色表包括角色标识1、角色标识2。
系统管理员为用户添加角色时参考。
动态互斥角色表包括角色标识1、角色标识2。
在用户创建会话选择活跃角色集时参考。
角色基数限制是指在创建角色时,要指定角色的基数。
在一个特定的时间段内,有一些角色只能由一定人数的用户占用。
(5)角色激活
用户是一个静态的概念,会话则是一个动态的概念。
一次会话是用户的一个活跃进程,它代表用户与系统交互。
用户与会话是一对多关系,一个用户可同时打开多个会话。
一个会话构成一个用户到多个角色的映射,即会话激活了用户授权角色集的某个子集,这个子集称为活跃角色集。
活跃角色集决定了本次会话的许可集。
会话表包括会话标识、用户标识。
会话的活跃角色表包括会话标识、角色标识。
第4章部分功能实现
4.1数据字典管理
图表 4-1 数据字典
4.1.1数据字典设计说明
图表 4-2 添加数据字典
输入条件:选择父节点,不选则默认为顶级。
名称必填,排序必填。
图表 4-3 修改数据字典
数据字典的用途
数据字典最重要的用途是作为分析阶段的工具。
在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户之间的通信,因此将消除许多可能的误解。
对数据的这一系列严密一致的定义也有助于改进在不同的开发人员或不同的开发小组之间的通信。
如果要求所有开发人员都根据公共的数据字典描述数据和设
计模块,则能避免许多麻烦的接口问题。
数据字典中包含的每个数据元素的控制信息是很有价值的。
因为列出了使用一个给定的数据元素的所有程序(或模块),所以很容易估计改变一个数据将产生的影响,并且能对所有受影响的程序或模块作出相应的改变。
数据字典数据库结构设计:采用树结构设计。
可灵活定义各种数据约束
4.1.2代码实现(Action层,Service层)
Action:
package org.novitiate.action;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.novitiate.base.BaseAction;
import org.novitiate.pojo.DictTb;
import org.novitiate.pojo.MenuTb;
import org.novitiate.pojo.NoteTb;
import org.novitiate.pojo.OperatorTb;
import org.novitiate.service.AdminService;
import org.novitiate.service.DictService;
import org.novitiate.service.MenuService;
import org.novitiate.service.NoteService;
import org.novitiate.util.Page;
import com.opensymphony.xwork2.ActionSupport;
import mons.beanutils.BeanComparator;
public class DictAction extends ActionSupport implements BaseAction,ServletRequestAware,ServletResponseAware {
//form
private String dname;
private Integer parentId;
private Integer dictOrder;
private Integer did;
private String pageNo;
//service
private DictService dictService;
private NoteService noteService;
private AdminService adminService;
private MenuService menuService;
//http
private HttpServletRequest request;
private HttpServletResponse response;
//output
@Override
public String delete() {
String str1=request.getParameter("ids");
//System.out.println("ids:"+str1);
Integer ids=null;
OperatorTb user=(OperatorTb) request.getSession().getAttribute("user");
if(str1.indexOf(",")>-1){
String [] str=str1.split(",");
for (int i = 0; i < str.length; i++) {
ids=Integer.decode(str[i]);
DictTb role=(DictTb) dictService.getId(ids);
List list=dictService.getParent(ids);
if(list==null){
try {
dictService.delete(role);
NoteTb note=new NoteTb();
note.setOpIp(request.getRemoteAddr());
note.setOpDesc("删除字典,字典名称:"+role.getDictName()+"编号:"+ids);
note.setOpId(user.getRegId());
note.setOpName(user.getOpName());
note.setOpTime(new
Timestamp(System.currentTimeMillis()));
noteService.save(note);
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
request.setAttribute("dictstr","<script>alert('数据已经被引�?');</script>");
}
}
}else{
ids=Integer.decode(str1);
DictTb role=(DictTb) dictService.getId(ids);
List list=dictService.getParent(ids);
if(list==null){
try {
dictService.delete(role);
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
NoteTb note=new NoteTb();
note.setOpIp(request.getRemoteAddr());
note.setOpDesc("删除数据字典,字典名称:"+role.getDictName()+"编号:"+ids);
note.setOpId(user.getRegId());
note.setOpName(user.getOpName());
note.setOpTime(new
Timestamp(System.currentTimeMillis()));
noteService.save(note);
}else{
request.setAttribute("dictstr","<script>alert('数据已经别引�?');</script>");
}
}
return getAll();
}
@Override
public String getAll() {
System.out.println("into
/happyFamily/admin/dict!getAll.action");
if(request.getParameter("mid")!=""&&request.getParameter("mid")!= null){
OperatorTb user=(OperatorTb) request.getSession().getAttribute("user");
//���ҹ��˵���
String str=adminService.getOpop(user.getOpId());
//System.out.println("str��"+str);
String [] menuids=str.split(",");
Integer menuid=Integer.decode(request.getParameter("mid"));
//System.out.println("str1:"+str);
//System.out.println("����:"+menuids.length);
//���Ҹò˵��µ����й�������ť
List funclist=menuService.getFunc(menuid);
List userfunlist=new ArrayList();
for (Iterator iterator = funclist.iterator(); iterator.hasNext();) {
MenuTb name = (MenuTb) iterator.next();
//System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
//System.out.println("�Ӳ˵������й��������?"+name.getMenu Name());
//�жϸ��û��Ƿ�ӵ�и�Ȩ��
for (int i = 0; i < menuids.length; i++) {
//System.out.println("�˵�ID:"+menuids[i]);
Integer mennuid=Integer.decode(menuids[i]);
if(name.getMenuId().equals(mennuid)){
userfunlist.add(name);
}
}
}
/*System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$");
for (Iterator iterator = userfunlist.iterator(); iterator.hasNext();) {
MenuTb name = (MenuTb) iterator.next();
System.out.println("�û����������?"+name.getMenuName());
}*/
request.getSession().setAttribute("dictfunclist", userfunlist);
}
List list=dictService.getAll();
if(list==null){
request.setAttribute("rolelist",null);
}else if(list.size()>0){
BeanComparator bc = new BeanComparator("dictOrder");
Collections.sort(list, bc);
Page page=new Page(request,response,list.size(),list,10);
request.setAttribute("rolelist",list);
}else{
request.setAttribute("rolelist",null);
}
request.getSession().setAttribute("parentlist",
dictService.getParent());
return "getAllSuccess";
}
@Override
public String getById() {
String ids=request.getParameter("ids").toString();
//System.out.println("ids:"+ids);
Integer rid=null;
if(ids.indexOf(',')>-1){
//System.out.println("��ȡ�Ľ�ɫID:"+ids.substring(0,ids.indexOf(' ,')));
String id1=ids.substring(0,ids.indexOf(','));
//System.out.println("cc:"+Integer.getInteger(id1));
rid=Integer.decode(id1);
//System.out.println("id:"+rid);
}else{
rid=Integer.decode(ids);
//System.out.println("rid:"+rid);
}
//System.out.println("��ɫIDΪ:"+rid);
DictTb role=(DictTb) dictService.getId(rid);
request.getSession().setAttribute("dict",role);
return "getByIdSuccess";
}
@Override
public String save() {
if(getPageNo().equals("1")){。