OA系统的左侧菜单栏的菜单项的处理
来源:互联网 发布:网络拓扑图基本结构 编辑:程序博客网 时间:2024/06/05 19:25
==============================================================================
如图所示,OA系统的左侧是一个使用权限的菜单栏。根据权限来决定是否显示相应的权限功能。
在处理这类问题的时候,需要清楚左侧栏的数据是一进入系统内部后就一直要使用的、每个用户都要用到,而且也不需要对其进行增删改,并且也不准备修改左侧的权限菜单栏,所以,左侧栏的数据是固定不变的,不管谁进入系统内部都是一样的(这里的“一样的”不是说权限不同的人看到的内容是一样多的,指的是不管你权限多大多小,看到的内容肯定在这些内容以内,不会超出),所以,我们可以只对其查询一次,然后保存到application对象中,而不需要每次请求都查询一遍。最后在页面显示的时候,可以对用户的权限进行判断,如果有相应的权限,那么就显示相应的菜单项。
遇到的问题:1. 既然要把左侧菜单栏的数据保存到Application对象中,那么该在哪里对其进行保存?什么时候开始?
因为这个数据只需要查询一次,也只要保存一次,而且一进入OA系统内部就要用到,那么我们可以让项目已启动就对数据进行查询并保存到Application对象中。
这样的话,我们就可以配置 ServletContextListener 监听器,对Application对象进行操作,在Application初始化的时候,就进行查询数据,保存数据。
publicclassInitListenerimplementsServletContextListener{
//销毁application对象时调用
publicvoid contextDestroyed(ServletContextEvent sce){
// TODO Auto-generated method stub
}
//初始化application对象时调用
publicvoid contextInitialized(ServletContextEvent sce){
}
}
遇到的问题: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容器对象。
完整代码如下:
publicvoid contextInitialized(ServletContextEvent sce){
//获取当前的容器对象
ApplicationContext ac =WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
//获取当前容器对象的privilegeService对象
PrivilegeService privilegeService =(PrivilegeService) ac.getBean("privilegeServiceImpl");
//准备数据
List<Privilege> topPrivilegeList = privilegeService.findTopList();
sce.getServletContext().setAttribute("topPrivilegeList", topPrivilegeList);
}
其中在对topPrivilegeList对象进行保存的时候,也需要注意!
在这里我们不能使用ActionContext.getContext().getApplication().put(k,v);因为,我们就在初始化application对象,哪来的Application对象来保存这个数据。所以,在使用ActionContext.getContext().getApplication().put(k,v);进行保存的时候会报空指针异常!!
来自为知笔记(Wiz)
附件列表
- 360反馈意见截图163706229713987.png
0 0
- OA系统的左侧菜单栏的菜单项的处理
- 时尚的左侧菜单
- 左侧菜单的设计
- js 很方便的收缩左侧菜单栏
- 系统菜单项的处理
- JavaScript处理数据完成左侧二级菜单的搭建
- linq的左侧菜单列表
- OA系统的技术发展
- OA系统的价值
- OA系统左侧导航
- 左侧可收起展开的菜单栏实现思路
- iframe 点击左侧菜单栏 右侧显示相应的网页内容
- SNS-OA下一代OA系统的必然
- 模似windows XP 左侧的菜单效果
- 模似windows XP 左侧的菜单效果
- 固定的左侧移动导航菜单
- CSS简洁的左侧二级菜单
- 左侧菜单+正文Fragment的基类
- 参考了一些获取验证码的方式,再次封装一下获取验证码按钮,以及手机号码的正则处理
- LeetCode 111:Minimum Depth of Binary Tree
- 描绘柱状图
- 用AFN时报错
- js判断复选框的数量
- OA系统的左侧菜单栏的菜单项的处理
- mac上mysql root密码忘记或权限错误的解决办法
- Android学习路线指南
- hdu1879 最小生成树模板 peim和kruskal
- Volley缓存-原理介绍
- Javascript:谈谈JS的全局变量跟局部变量
- Project Euler Problem 4
- 设计原则之迪米特法则
- Correspondence analysis application