权限管理框架实现(2)--Struts中ValueStack使用
来源:互联网 发布:mac打开照片 编辑:程序博客网 时间:2024/05/18 01:59
众所周知,struts中,数据交互是走的ValueStack,在权限交互中,我们有些数据,存储到ValueStack中,更容易被用户利用,用户可以在jsp或者其他框架下,利用已有的数据,让前台不需要关心权限数据是如何存储的,只需要关心我们某一个权限标示是否被通过了,这是如何实现的呢?大家看源码。
1,生命周期
在struts-default.xml文件中决定了在web容器启动时将会创建OgnlValueStackFactory对象,该对象实现了ValueStackFactory接口,负责ValueStack的创建工作。ValueStack的生命周期是随着request的创建而创建,随request的销毁而销毁。具体可见源代码:在PrepareOperations类的createActionContext
至于清理工作,struts统一放在了PrepareOperations类的cleanupRequest方法中。
2,数据结构
实际不需多说,大家写jsp源码时,可以预见,这是种map类型的机构,符合OGNL特点,或者说struts实现了OGNL
CompoundRoot继承了ArrayList类,即是一个List集合,详见源码CompoundRoot类。
Context:而context实际上是一个hashMap
3,例子
知道原理之后,使用就变得非常简单
添加
private void toVm(Result result){ ValueStack context = ActionContext.getContext().getValueStack(); Set set = result.keySet(); Iterator resultCode = set.iterator(); context.set("textProvider", this); context.set("datePickerLocale", this.getDatePickerLocale()); String text; while(resultCode.hasNext()) { text = (String)resultCode.next(); context.set(text, result.get(text)); } }
private String getFromVm(String authCode){ ValueStack context = ActionContext.getContext().getValueStack(); Map map = (Map)context.peek(); String result = ((Boolean)map.get(authCode)).toString(); return result; }
4,前台
由于前台使用的是velocity进行组合,所以,获取值的时候,需要写如下代码:
#if($!{auth_el_net_testauth_add}) <input type="button" style="width:100px;" value="添加"></input>#end
总结
非常简单的例子,第一步将我们需要实现的功能进行了整合,但是还是不够简单,我们应该提供一种更简单的接入方式,前台开发只需要引入js,使用特殊标签将资源包裹,就能自动判断,这种方案,我们下片博客介绍
- 权限管理框架实现(2)--Struts中ValueStack使用
- 权限管理框架实现(1)--Struts切面处理
- Struts中valueStack的结构
- html框架中的动态权限树(Struts-Menu实现)
- html框架中的动态权限树(Struts-Menu实现)
- Source Taste: Struts 2: ValueStack
- SSH框架之Struts的Ognl表达式语言(2)、ValueStack对象(比较复杂,也比较重要)
- 使用Struts 2框架实现文件下载
- Struts中使用Validator框架(2)
- Struts 2杂谈(1):ValueStack对象的传送带机制
- Struts 2杂谈(1):ValueStack对象的传送带机制
- Struts 2杂谈(1):ValueStack对象的传送带机制
- struts.valueStack
- Struts--valueStack
- Struts(6)Struts框架中使用filter过滤关键词
- Struts 内置拦截器的使用 valuestack
- Struts中使用Tiles框架实现复合式网页步骤
- 使用Struts框架实现国际化
- JNI 常用的JNI操作Demo 良心作品
- 解决PLSQL记录被另一个用户锁住的问题
- JDBC连接mysql数据库
- Spark Streaming kafka 实现数据零丢失的几种方式
- jmeter学习笔记(Threads)
- 权限管理框架实现(2)--Struts中ValueStack使用
- Cocos2d-JS 精灵的性能优化
- Viewpager+fragment数据更新问题解析
- BFS--点到点间的最短路径
- 七号信令的消息结构(包括SCCP详解)
- 【JS】:JS 日期类的使用
- 类字面变量
- 码农小汪-spring框架学习之9-基于 Java 的配置元数据 @ImportResource
- iOS开发系列--视图切换