14.(1)Struts2_值栈
来源:互联网 发布:文字转音频软件 编辑:程序博客网 时间:2024/05/17 18:23
Struts2_值栈(1)(2)(3)转载于三位不同的博主,帮助理解,谢谢
关于值栈:
1.struts2中利用值栈来存储数据,在struts2中,把数据存在值栈中,然后在jsp页面用ognl表达式取出。
例:helloworld时,${productName}读取productName值,实际上该属性并不在request等域对象中,而是从值栈中获取的。
2.获取方法:在struts2中的action有三种方法获取值栈
ValueStack valueStack=ActionContext.getContext().getValueStack();
ValueStack valueStack=(ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");
ValueStack valueStack=ServletActionContext.getValueStack(ServletActionContext.getRequest());
可以看到我们可以利用request来获取值栈,而request的生命周期为一次请求,所以值栈的生命周期也为一次请求。
3.ValueStack 是一个接口,它的实现类是ognlvalueStack。
在valueStack中有两个数据结构,一个名字为context,另一个为root。
(1)context的类型是OgnlContext,OnglContext实现了Map接口,所以context本质上是一个Map。
map栈中有一个名称为_values的对象,它是一个HashMap,在这里存放了request,response,session,application等servlet容器的内容,我们称它为map栈。
(2)root类型是CompoundRoot,CompoundRoot继承了ArrayList类,所以它本质上是一个ArrayList,我们称它为对象栈。
4.值栈分为两个逻辑部分:
-->Map栈:实际上是OgnlContext类型,是个Map,也是对ActionContext的一个引用,里边保存着各种Map:requestMap,sessionMap,applicationMap,parametersMap,attr
-->对象栈:实际上是CompoundRoot类型,是一个使用Arraylist定义的栈,里边保存各种和当前Action实例相关的对象,是一个数据结构意义的栈。
5.map栈中还有一个名称为_root的对象,它和我们上面说的valueStack中的另一个数据结构root相同,都是对象栈,为什么valueStack中会有两个对象栈呢,这是因为struts2继承了以前一些框架的内容导致的。
对象栈中保存了两个对象,一个是ValueStackAction,它代表的是当前请求的Action,另一个是DefaultTextProvider,它是用于struts2国际化的。
图解下:
所以在jsp页面中,如果要输出的内容在对象栈中,直接指定属性名字,如果在map栈中,要用#来指定
例如
String name="aaa";String Bname="bbb";ActionContext.getContext().getValueStack().push(name); //把字符串放入对象栈中ActionContext.getContext().put("Bname", Bname); //把字符串放入map栈中在jsp页面中取出的对应的值:
<s:property value="name"/><s:property value="#Bname"/>
<转载于博客园博主众里寻他壹贰度>
- 14.(1)Struts2_值栈
- 14.(2)Struts2_值栈
- 14.(3)Struts2_值栈
- (14)Struts2_值栈
- Struts2_值栈
- 15. Struts2_值栈
- (02)Struts2_概述
- 14. Struts2_动态方法调用
- (03)Struts2_搭建环境
- (18)Struts2_通用标签
- (19)Struts2_表单标签
- Struts2_学习笔记(七)----OGNL
- Struts2_学习笔记(八)----Struts-tags
- Struts2_学习笔记(十)----I18N
- Struts2_学习笔记(十二)----Struts2总结
- 13.Struts2_动态方法调用(了解)
- 14.struts2_框架流程分析,以及Params拦截器
- (13)Struts2_动态方法调用(了解)
- Git多SSH账号管理
- Linux鸟哥的私房菜-认识系统服务(1)daemon
- linux下FTP服务启动与关闭命令
- SdutAcm-OJ平台 正方形 (java)
- Java设计模式-观察者模式
- 14.(1)Struts2_值栈
- S7300通过BCNet和S7-1200/1500等西门子PLC数据交换
- USB键盘鼠标报告描述符解释
- main函数的三个参数
- CGAffineTransformMake…… 和 CGAffineTransform……的区别
- uva 10891
- chromedriver与chrome对应版本及下载地址
- java.net.SocketException: Unexpected end of file from server
- js+html空间数据编码问题--以姓名为例(代码设涉及文件读取,文本数字提取,特别是文本x,y坐标的提取)