Strust2值栈

什么是值栈?

��1.之前在web阶段,在servlet里面进行操作,把数据放到域对象里面,在页面中使用el表达式获取到,域对象在一定范围内,存值和取值。

��2.在Struts2里面本身提供一种存储机制,类似域对象,是值栈,可以存值和取值。 

    在action里面把数据放到值栈里面,在页面中获取到值栈数据。


servlet和action区别:

Servlet:默认在第一次访问时创建,创建一次,单实例对象

Action:访问时创建,每次访问action时,都会创建action对象,创建多次,多实例对象    


值栈存储位置

1.每次访问action时,都会创建action对象,在每个action对象里面都会有一个值栈对象(只有一个)


获取值栈对象:

-在action中使用ActionContext类(可以获取表单数据的类)里的方法得到值栈

 
 
  1.      ActionContext context = ActionContext.getContext();
  2.      ValueStack stack = context.getValueStack();

每个action对象中只有一个值栈对象。


值栈内部结构:

栈:后进先出,栈中最上面的元素就是栈顶元素 。

1.主要操作root部分,结构是list集合。另一部分是context,结构是map集合

2.context结构存储的对象引用 key值有“request,session,application,parameters,attr” 对应的值分别是对应对象的引用。attr值是获取域对象里面的值,获取域范围最小里面的值。

3.Struts2里面标签s:debug,使用这个标签可以查看值栈结构和存储值。通过action访问有该标签的jsp页面。

4.在action中没有任何操作的话,栈顶元素是该action的路径

    action对象里面有值栈对象,值栈对象里面有action引用。


向值栈放数据方式(需要继承ActionSupport类):

在action定义变量,生成变量的get方法(常用)。还有使用值栈对象里面的set或push这两种方法。

使用set方法会分配一个map空间,在action中定义变量的方法可以减少空间的分配。


向值栈中放对象(需要继承ActionSupport类)

方法类似于向值栈中放入数据,在action中定义对象变量并创建对象,生成对象的get方法,在执行方法中set变量值。


向值栈中放list集合(需要继承ActionSupport类)

在action中首先定义list变量,再生成get方法,然后再方法中向list中创建对象并给对象设置值。


从值栈中获取数据

使用struts2的标签+ognl表达式获取值栈数据

<s:property value="ognl表达式"/>

获取对象

在action中定义对象变量并创建对象,生成对象的get方法,在执行方法中给相应的对象set变量值。 ognl表达式为”对象.变量值"。 

获取list集合


使用struts2标签类似jstl的foreach标签,<s:iterator>,遍历值栈的list集合

①<s:iterator value="list">     //list是创建的list集合对象名 

    <s:property value="变量1"/>

    <s:property value="变量2"/>

    <s:property value="变量3"/>

</s:iterator>

html注释标签不能注释带有标签的属性,jsp注释标签可以注释。

②<s:iterator value="list" var=“user”>

    //此方式机制:把每次遍历出来的user对象放到context里面,获取context里面数据特点就是写ognl表达式,使用特舒符号#

    <s:property value="#user.变量1"/>

    <s:property value="#user.变量2"/>

    <s:property value="#user.变量3"/>

</s:iterator>


ognl表达式%使用

在Struts2标签里面使用ognl表达式,如果直接在Struts2表单标签里面使用ognl表达式不识别,只有%之后才会识别。

格式:<s:textfield name="username" value="%{request.req}"></s:textfield>









  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值