ognl表达式的使用和值栈

1.值栈在开发中的应用
主流应用:值栈 解决action向jsp传递数据问题
问题:action向jsp页面携带数据,都是什么样的数据
1.文本(字符串)
1.fieldError 校验数据错误信息提示
2.actionError 关于逻辑操作时的错误信息(例如登陆失败)
3.message 就是一个信息
2. 复杂数据
1.
这里写图片描述
这里写图片描述
需要注意的是这是将集合中迭代出来的每一个元素起个名称叫做user,而user是存储在context中的,不再root中。如果user要用就必须要写#号的

username:
password:



注意: 如果我们在使用进行迭代时,没有给迭代出的元素起名

username:
password:


用set存


username:
password:


关于默认压入到valueStack中的数据
1.访问的action对象会被压入到valueStack中。
action会被默认压入值栈,在拦截器调用前就压了。
Action如果想传递数据给jsp,只有将数据保存到成员变量,并且提供get方法就可以了

这里写图片描述

ActionContext是Action的上下文,Struts2在其中自动保存了一些Action执行过程中一些所需的对象,比如session、parameters、等
Struts2会根据每个执行HTTP请求的线程来创建对应的ActionContext,即一个线程有一个唯一的ActionContext。因此,使用者可以使用静态方法ActionContext.getContext()来获取当前线程的ActionContext,也正是由于这个原因,使用者不用操心让Action是线程安全的。
ActionContext本身的数据结构是映射结构,即一个Map,用key来映射value,所有使用者完全可以像使用Map一样来使用它。
Struts2本身在其中放入的数据有ActionInvocation、application,locale,action的name、request的参数,Http的session以及值栈等,可以参考API。
需要注意的是,它仅在由于request而创建的线程中有效(因为request发起时,才创建对用的actionContext),而在服务器启动的线程中(比如fliter的init方法)无效。

ValueStack于ActionContext的练习与区别
相同点:他们都是在一次Http请求的范围中使用的,即他们的生命周期都是一次请求。
不同点:值栈是栈的结构,ActionContext是映射Map的结构

联系:ValueStack.getContext()方法得到的Map其实就是ActionContext的map。
所以ValueStack和ActionContext本质上可以相互获得。
这里写图片描述
从actionContext中获取数据
这里写图片描述
put—–这个都是存到了request中了
这里写图片描述

1.什么是valueStack
valueStack主要是将action数据携带到页面上,通过ognl获取数据
2.valueStack和ActionContext是什么关系?
ActionContext ctx=ActionContext.getContext();
if(ctx!=null){
stack=ctx.getValueStack();
}
valueStack是每一次请求时,都会创建。
在ActionContext中持有了valueStack的引用。

3.如何获得值栈对象

对于valueStack获取有两种方式:
1.通过request获取
2.通过ActionContext获取

5.如何向valueStack中存储数据
主要有两个方法
1.push (Object obj)底层就是root.add(0,obj)将数据存到栈顶
2.set(String name,Object obj);—》底层就是将数据封装到HashMap中,在将这个HashMap通过push存贮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值