值栈中root栈和context栈详解
来源:互联网 发布:pulltorefresh.js 编辑:程序博客网 时间:2024/06/08 07:01
OGNL只是显示数据的表达式语言|ValueStack值栈才是所谓的存储数据的
详解 对象栈 root
①往对象栈(CompoundRoot extends ArrayList)中放数据
②ActionContext.getContext().getValueStack().push(person);//把person对象放入到栈顶
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
③ActionContext.getContext().getValueStack().add(person);
把person放入到对象栈的底部
- 1
- 2
- 3
- 1
- 2
- 3
④ActionContext.getContext().getValueStack().add(0,person);
把person对象放入到对象栈指定的位置
- 1
- 2
- 3
- 1
- 2
- 3
详解Map值栈如何存放数据
①通过map,request,session.application(requestMap,sessionMap.applicationMap)来存放数据
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
总结
- ValueStack是ognl存放数据的对象
- 得到ValueStack有三种方案
ActionContext.getContext().getValueStack()
ServletActionContext.getValueStack(request);
request.getAttribute(“struts.valueStack”); - ValueStack作用域为request
- 当action创建的时候,ValueStack就创建了,当action被销毁时,ValueStack就销毁了
- ValueStack可以利用对象栈和map栈存放数据
- 向对象栈中存放数据
ActionContext.getContext().getValueStack().push 栈顶 对象
ActionContext.getContext().getValueStack().add() 栈底 对象
ActionContext.getContext().getValueStack().add(index,object); 按照指定的位置存放在对象栈中
ActionContext.getContext().getValueStack().set() 栈顶 Map - 向map栈中
request,session,application setAttibute() map–>_values—>requst,session,application
ActionContext.getContext().put(key,value) 直接存放在map栈中
如何利用OGNL表达式去ValueStack中的数据
- 去栈顶的元素
- 取栈顶的元素
- s:iterator标签的value属性的值无论来自对象栈还是map栈,都可以不加#,s:select标签也适合
- 在s:iterator标签迭代的时候,把当前正在迭代的元素放入到栈顶
属性驱动:
* 在action中,有属性,属性的名称和页面上form表单中的name的值对应
* 属性必须有set和get方法
* 原理
在提交一个请求以后,action中的属性在栈顶。ParametersInterceptor拦截器
会把页面上的form表单的值获取,然后调出ValueStack,给栈顶的属性赋值。
模型驱动
* StudentAction implements ModelDriver
* 在action中需要有一个私有的对象
private Student model = new Student();
* 原理
* 先经过ModelDriverInterceptor,作用是把model放入到栈顶
* 再经过ParametersInterrceptor,把栈顶的属性赋值
这两个拦截器不能颠倒执行
action 中的栈的相关代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
jsp页面取值相关代码
- 值栈中root栈和context栈详解
- ONGL中Root 和 Context
- Android Context 和 ApplicationContext 详解
- Android Context 和 ApplicationContext 详解
- 修改Weblogic Context root
- root-context.xml配置
- 更改web context-root
- Context 详解
- Context详解
- Context详解
- context详解
- context详解
- context详解
- Context 详解
- Context详解
- context详解
- Context详解
- Context详解
- github命令行 指定路径 修改上传
- Android studio编译没有activity或没有default activity的应用
- python包管理工具关系
- php 从一个数组中随机取一个元素出来
- Linux中vim显示中文乱码的问题
- 值栈中root栈和context栈详解
- 使用过滤器(Filter)解决乱码问题
- hadoop hdfs存储原理
- linux 查看文件命令od
- Android 打包混淆问题
- 「翻译」Unity中的AssetBundle详解(二)
- XZ_CSS之CSS属性-继承和不可继承
- UE3之Scaleform遇到的一些坑
- 深度学习笔记(一):Learning Multi-Domain Convolutional Neural Networks for Visual Tracking