Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Struts2基础——ValueStack和OGNL

一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot(针对的是类级别的)(1)继承自 ArrayList —— 先进后出(2)提供了栈的几个操作:peek() 返回栈顶对象,pop() 弹出栈顶对象,push() 将对象压入栈顶(3)默认情况下,会将当前 Action 对象压入栈顶。通过这个 Action 对象,可以访问到该 Action 的所有属性以及错误信息。(4)获取方式可以通过 ValueStack 对象的 getRoot() 方法来获取到。(5)页面中获取对象栈中的内容:结合 struts2 标签和 OGNL,不需要指定根,默认为值栈。唯一需要注意的一点是:会从指定下标开始向下查找第一个 属性,若不指定,则从栈顶开始向下找。如:<s:property value="[1].userName"/>3.Map栈(针对的是 action 级别的,方法级别的)(相当于一个容器,存放了所有的东西,所有东西的获取都可以从它里拿)(1)ActionContext 中的 context 就是 Map栈,和从 ValueStack 中获取的 context 是一个东西。(2)内容:
原生的 Web 资源,
Web资源对应的 Map 对象(通过 ActionContext 获取 sessionMap 等,其实也是从 Map 栈中获取的)
ValueStack 对象
Action 类运行相关的环境信息(3)获取方式:
后台:Map<String, Object> context = ActionContext.getContext().getValueStack().getContext();(4)页面中获取 Map 栈中的数据:结合 Struts2 标签和 OGNL 来取值,指定 #。如:<s:property value="#request.requestAttrKey"/>(5)Map 栈结构如图:4.ValueStack 对象的获取方式:(1)通过 ActionContext 对象获得ValueStack valueStack = ActionContext.getContext().getValueStack();(2)通过读取请求域获取ValueStack valueStack = (ValueStack) request.get("struts.valueStack");(3)通过 ServletActionContext 获取ValueStack valueStack = ServletActionContext.getValueStack(ServletActionContext.getRequest()); 5.Struts2会为每一个请求创建一个 ValueStack 对象,保证了线程安全。 对象栈是针对 Action 类或者手动压入栈顶的对象,而 map 栈针对的是一个 action 请求,针对的是方法,在方法中我们可以得到的东西或者可以设置的东西,在map栈中就能够体现。 二、OGNL(对象图导航语言)1.本身不属于 Struts2 ,是属于 Apache Common 下的一个子项目。ognl-3.0.6.jar,依赖 javassist-3.11.0.GA.jar2.未指定上下文,从根对象中读取数据:(1)从 root 对象中读取 rootProperty 属性:Object value = Ognl.getValue("rootProperty", root);(2)从 rootList 或是 rootArray 中读取 第一个 root 的 rootProperty 属性:Object value = Ognl.getValue("[0].rootProperty", rootList);(3)从 rootMap 中读取属性  rootMapKey01 对应的值:e1:Object depart02 = Ognl.getValue("rootMapKey01", rootMap);e2:HashMap<String, String> map = new HashMap<>();map.put("attr.name", "attr.value");Object value = Ognl.getValue("["attr.name"]", map);3.同时指定了上下文(必须为一个Map对象)和根(为一个 List)(1)若指定了 #,则表示从 Map 中查找Object value = Ognl.getValue("#mapKey02.propertyName", map, rootList);(2)若没有指定 #,则表示从根中查找Object value = Ognl.getValue("[1].propertyName", map, rootList);4.调用非静态方法:Object value = Ognl.getValue("size()", list);5.调用静态方法:e1:Object value = Ognl.getValue("@java.lang.Math@PI", null);e2:Object value1 = Ognl.getValue("@java.lang.Math@floor("3.14")", null);推荐阅读:Struts中异步传送XML和JSON类型的数据 http://www.linuxidc.com/Linux/2013-08/88247.htmStruts2的入门实例 http://www.linuxidc.com/Linux/2013-05/84618.htmStruts2学习笔记-Value Stack(值栈)和OGNL表达式  http://www.linuxidc.com/Linux/2015-07/120529.htm struts2文件上传(保存为BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htmStruts2的入门实例 http://www.linuxidc.com/Linux/2013-05/84618.htmStruts2实现ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm遇到的Struts2文件下载乱码问题 http://www.linuxidc.com/Linux/2014-03/98990.htmStruts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htmStruts2 注解模式的几个知识点 http://www.linuxidc.com/Linux/2013-06/85830.htmStruts 的详细介绍:请点这里
Struts 的下载地址:请点这里本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133118.htm