Strus2中关于ValueStack详解
什么是ValueStack
它是一个接口com.opensymphony.xwork2.util.ValueStack。我们使用它是将其做为一个容器,用于携带action数据到页面。在页面上通过ognl表达式获取数据。
valueStack主要是将action数据携带到页面上,通过ognl获取数据
1.ValueStack有一个实现类叫OgnlValueStack.
2.每一个action都有一个ValueStack.(一个请求,一个request,一个action,一个valueStack) valueStack生命周期就是request生命周期。
3.valueStack中存储了当前action对象以及其它常用web对象(request,session,application.parameters)
4.struts2框架将valueStack以“struts.valueStack”为名存储到request域中。
valueStack结构
ValueStack中 存在root属性 (CompoundRoot) 、 context 属性 (OgnlContext )!并且context中含有root
* CompoundRoot 就是ArrayList
* OgnlContext 就是 Map
list集合中存储的是action相关信息
map集合中存储的是相关映射信息,包含 paramters,request,session,application attr等。
我们想要从list中获取数据,可以不使用#号.(它就是ognl的root)
如果从map中获取数据,需要使用#. (其实在struts2中的map–context其实就是ognlContext)
结论:
ValueStack它有两部分 List Map
在struts2中List就是root Map就是ognlContext.
默认情况下,在struts2中从valueStack获取数据从root中获取。
值栈对象的创建 ,ValueStack 和 ActionContext 是什么关系 ?
valueStack是每一次请求时,都会创建.
ActionContext ctx = ActionContext.getContext();
if (ctx != null) { stack = ctx.getValueStack(); }
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
如何获得值栈对象?
对于valueStack获取有两种方式:
1.通过 request获取
ValueStack vs=(ValueStack) ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
2.通过ActionContext获取.
ValueStack vs=ActionContext.getContext().getValueStack();
向值栈保存数据 (主要针对 root)
主要有两个方法
push(Object obj)——->底层就是 root.add(0,obj) 将数据存储到栈顶。
set(String name,Object obj);—–>底层是将数据封装到HashMap中,在将这个HashMap通过push存储。
在jsp中 通过 <s:debug />
查看值栈的内容
在JSP中获取值栈的数据
root中数据不需要#,而context中数据需要#
1.如果栈顶是一个Map集合,获取时,可以直接通过Map集合的key来获取value.
<s:property value="username"/>
2.如果栈顶数据不是一个Map,没有key值,可以使用序号来获取。
<s:property value="[0]"> 从0的位置向下查找所有。<s:property value="[0].top"> 只查找0位置上数据。
如何获取OgnlContext中数据:
request: <s:property value="#request.username"/>
session: <s:property value="#session.username"/>
application:<s:property value="#application.username"/>
attr: <s:property value="#attr.username"/>
parameters:<s:property value="#parameters.cid[0]"/>
转载于:https://www.cnblogs.com/xtdxs/p/6527380.html
Strus2中关于ValueStack详解相关推荐
- ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route
前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...
- Asp.net中GridView使用详解(引)【转】
Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...
- Linux中iptraf命令详解(IP局域网监控工具)
2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03 作者:佚名 ...
- ArcGIS Engine中的Symbols详解
转自原文 ArcGIS Engine中的Symbols详解 本文由本人翻译ESRI官方帮助文档.尊重劳动成果,转载请注明来源. Symbols ArcObjects用了三种类型的Symbol(符号样式 ...
- js路由在php上面使用,React中路由使用详解
这次给大家带来React中路由使用详解,React中路由使用的注意事项有哪些,下面就是实战案例,一起来看一下. 路由 通过 URL 映射到对应的功能实现,React 的路由使用要先引入 react-r ...
- Linux中etc目录详解
Linux中etc目录详解 /etc目录 包含很多文件.许多网络配置文件也在/etc 中. /etc/rc or/etc/rc.d or/etc/rc*.d 启动.或改变运行级时运行的sc ...
- java 自定义正则表达式_java中正则表达式实例详解
Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...
- numpy中reshape方法详解
numpy中reshape方法详解_zhanggonglalala的博客-CSDN博客_reshape
- JavaScript中getBoundingClientRect()方法详解
JavaScript中getBoundingClientRect()方法详解 getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bo ...
最新文章
- php图片发送另一台,phpcurl发送图片处理
- 编程之美-阶乘方法整理
- 【168天】黑马程序员27天视频学习笔记【Day07】
- Go中数字转换字符串的正确姿势
- [C++] C++标准中定义的实体(entity)/ 声明 / 定义
- expect脚本同步文件,expect脚本指定host和要同步的文件,构建文件分发系统,批量远程执行命令...
- maven插件开发(二)
- 在php中isset什么意思,php – isset()和__isset()之间有什么区别?
- Total Commander工具栏图标 备份
- 2 多贝西小波_【原创】土超:安卡拉高古VS贝西克塔斯
- 【直观图解】模型选择之-N折交叉验证法(v-fold cross-validation)
- 最优化理论与凸优化的用处
- 计算机系大一开学需要带什么,大一新生上学要不要带电脑?辅导员给出建议,家长可以参考...
- 软件默认安装在C盘解决方案 eg:google浏览器、XMind脑图工具等
- 计算机软件ghb,GHB 文件扩展名: 它是什么以及如何打开它?
- 艾奇KTV电子相册制作软件 4.7 破解安装版
- 探究opencv中的moments函数和HuMoments函数
- 小蛋白泛素(Ub)共价附着降解靶向嵌合体-Ibrutinib/HS-27/Ibrutinib-biotin
- 食物相克小知识http://www.best4c.com/loginForLink.do?domain=www.csdn.net
- 深入剖析斐波拉契数列
热门文章
- java实现ListObject转List实体类,java实现Object转对象,java实现Object转实体类
- java人体识别_用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍...
- Linux简单命令收录(who,echo,date)【上】
- C++:34---union:联合/共用体,一种节省空间的类
- 多进程鱼多线程的权衡选择
- 《剑指Offer》36:二叉搜索树与双向链表
- java 场景处理,将黄瓜场景示例作为一个场景处理
- anaconda中怎么sh_【好工具】 深度学习炼丹,你怎么能少了这款工具!JupyterLab 远程访问指南...
- 英语口语-文章朗读Week10 Thursday
- 完成一个H.265/HEVC码流分析工具