OA系统的左侧菜单栏的菜单项的处理

如图所示,OA系统的左侧是一个使用权限的菜单栏。根据权限来决定是否显示相应的权限功能。

在处理这类问题的时候,需要清楚左侧栏的数据是一进入系统内部后就一直要使用的、每个用户都要用到,而且也不需要对其进行增删改,并且也不准备修改左侧的权限菜单栏,所以,左侧栏的数据是固定不变的,不管谁进入系统内部都是一样的(这里的“一样的”不是说权限不同的人看到的内容是一样多的,指的是不管你权限多大多小,看到的内容肯定在这些内容以内,不会超出),所以,我们可以只对其查询一次,然后保存到application对象中,而不需要每次请求都查询一遍。最后在页面显示的时候,可以对用户的权限进行判断,如果有相应的权限,那么就显示相应的菜单项。

遇到的问题:1. 既然要把左侧菜单栏的数据保存到Application对象中,那么该在哪里对其进行保存?什么时候开始?

因为这个数据只需要查询一次,也只要保存一次,而且一进入OA系统内部就要用到,那么我们可以让项目已启动就对数据进行查询并保存到Application对象中。

这样的话,我们就可以配置  ServletContextListener   监听器,对Application对象进行操作,在Application初始化的时候,就进行查询数据,保存数据。

  1. public class InitListener implements ServletContextListener {
  2. //销毁application对象时调用
  3. public void contextDestroyed(ServletContextEvent sce) {
  4. // TODO Auto-generated method stub
  5. }
  6. //初始化application对象时调用
  7. public void contextInitialized(ServletContextEvent sce) {
  8. }
  9. }

遇到的问题:2. 如何获取菜单栏的数据?怎么保存?(在Spring容器中怎么获取)

首先说明一下:

Privilege --> 是菜单项对象(其实Privilege的意思是权限的意思,在这里因为它是作为菜单栏的子项,所以才叫做菜单项对象)

PrivilegeService --> 是菜单项的Service接口,它有一个方法:findTopList() 获取顶级菜单项

PrivilegeServiceImpl -->是菜单项的Service接口的实现类

然后开始解决如何获取菜单栏的数据:

大致思路如下:

第一步:获取privilegeService对象;

第二步:通过privilegeService对象调用findTopList()方法获取List<Privilege> topPrivilegeList集合;

第三步:通过ServletContextEvent对象获取ServletContext对象(application),保存属性topPrivilegeList;

开始写代码遇到的问题:如何获取PrivilegeService对象?

解决问题:

误区:直接使用ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

来获取Spring容器对象,再通过Spring容器对象获取privilegeService对象。

为什么说上面的思路是误区呢?因为如果是通过 new ClassPathXmlApplicationContext()来获取Spring对象的话,

就相当于又创建了一个Spring容器对象,那么就有两个容器对象了。因为容器对象是非常耗性能的,一般一个项目只有一个。

那么该如何正确的获取已经被创建的Spring容器对象呢?

正确解法:Spring框架提供了一个工具类  WebApplicationContextUtils 可以获取到当前已经创建的Spring容器对象。

完整代码如下:

  1. public void contextInitialized(ServletContextEvent sce) {
  2. //获取当前的容器对象
  3. ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
  4. //获取当前容器对象的privilegeService对象
  5. PrivilegeService privilegeService = (PrivilegeService) ac.getBean("privilegeServiceImpl");
  6. //准备数据
  7. List<Privilege> topPrivilegeList = privilegeService.findTopList();
  8. sce.getServletContext().setAttribute("topPrivilegeList", topPrivilegeList);
  9. }

其中在对topPrivilegeList对象进行保存的时候,也需要注意!

在这里我们不能使用ActionContext.getContext().getApplication().put(k,v);因为,我们就在初始化application对象,哪来的Application对象来保存这个数据。所以,在使用ActionContext.getContext().getApplication().put(k,v);进行保存的时候会报空指针异常!!

来自为知笔记(Wiz)

附件列表

时间: 2024-08-15 22:59:22

OA系统的左侧菜单栏的菜单项的处理的相关文章

PHP系统左侧菜单栏的管理与实现

在日常的开发工作中,面对后台的日益增长的业务,以及后期业务的迭代开发,通常会选择添加菜单栏的形式来扩充业务功能,同样日益增长的后台菜单选项也为我们后期的维护,产生了一定的困难性.为此我总结出自己关于左侧菜单栏的管理模式或者方法.仅供参考. 在通常的开发中,对菜单栏的生成一般是通过以下几种方式: (1)模板文件对变量的遍历(接下来以thinkPHP5为例) (2)直接通过PHP进行组装 关于(2)直接通过PHP进行组装,不建议这样做,这样做会增大PHP代码与HTML的耦合与黏连,不利于代码的友好性

添加系统右键菜单项 管理员取得所有权(W)(带盾牌)

@color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKCR\*\shell\runas /ve /d "管理员取得所有权(&W)" /f reg add HKCR\*\shell\runas /v Icon /t reg_expand_sz /d "%SystemRoot%\system32\user32.dll,6"

新标杆 华天动力全新OA系统解析之UI界面

日前,国内领先的OA系统品牌华天动力发布了垂直换代的最新版本,新系统在功能与性能上进行了大幅度的全面升级.作为OA系统行业一款重量级的产品,将OA系统提升到一个新的高度,堪称行业新的标杆.为此,我们整理一个系列文章,向您全面解析这个全新的OA系统. 关于软件的UI界面设计,国内软件商显得要比国外同行更为重视.或许,国内的客户也更在乎视觉上的体验.而对于OA系统来说,其界面设计又比ERP等其他管理软件更高级,看起来更赏心悦目. 华天动力新版OA系统的界面进行了很大改动,却也没有面目全非,还是能够看

OA系统权限管理设计(转载)

不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l         不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最主要的功能. l         能够对"组"进行权限分配.对于一个大企业的业务系统来说,假设要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情.所以,系统中就提出了对"组"进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配. l 

OA系统权限管理设计方案

(转)OA系统权限管理设计方案 OA系统权限管理设计方案     不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能.     可以对“组”进行权限分配.对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情.所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配.    权限管理系统应该是可扩展的.它应该可以加入到任何带有权限管理功能的系统中.就像是组件一样的可以被不断的重用

ecshop后台增加模块菜单项详细教程(图文)

有的时候我们会在后台增加新的功能,菜单项是一个程序的入口,是必不可少的,如何在后台增加菜单项呢,大家可以参考下面的教程: 例如:想在后台左侧的菜单栏的"促销管理"下添加一个"搭配管理"菜单项. 具体操作如下: 牵扯到的文件: admin/includes/modules/inc_menu.php language/zh_cn/admin/commn.php language/zh_cn/admin/priv_action.php admin/includes/nc_

qt之菜单项定制

qt实现菜单,简单的界面QMenu+QAction完全可以实现,在加上qss的支持,可以定制出比较美观的菜单,qt的菜单一般用在托盘.按钮和工具栏上. 当然啦,也有很多软件有比较美观的托盘菜单,比如360.电脑管家等软件,效果图如图1所示,其实qt在4.2之后也提供了定制菜单的功能,使用QWidgetAction可以定制出自己想要的菜单来,接下来是我定制菜单栏的步骤. 图1 360图盘菜单 实现效果如下图2所示,菜单是由单个条目组成的,每一个条目又由左右两部分组成,左边是一个图标,并伴有底色,右

SharePoint 2013:自定义ECB菜单项的添加

本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xml中,定义一个CustomAction,重点关注一下其中高亮部分的属性(本例在文档内容类型的项上添加了一个菜单项,点击导航到一个自定义应用程序页面,并传递项所在的列表的Id作为参数): 添加到Feature,并部署.效果如下: 服务器对象模型创建 这里会用到Feature的事件处理程序.本例同时还演

asp.net oa系统开发方案

思道OA开发版 2016下载地址http://www.345oa.com/develop/ 思道OA基于Microsoft .NET/ASP.NET 4.0开发,数据库SQL Server,开发工具Visual Studio 2013. 思道OA提供开放的二次开发系统架构.Web开发的全套环境,是开发管理应用系统的理想平台. 思道OA提供单点登录技术,可于第三方系统集成,提供相关接口.案例源码. 思道OA介绍 1. 基于.NET平台    思道OA是国内最早发布的基于.NET平台的企业OA办公解