如何用struts标签和ognl 获取 ValueStack 和 Stack Context 中的值

本文详细介绍了Struts2框架中的值栈(ValueStack)与迭代器的使用方法,包括如何从值栈中获取对象属性及通过迭代器进行对象遍历。通过实例演示了Struts2框架下值栈和迭代器的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这个例子中,Test1Action跳到Test2Action,所以值栈中有两个Action。

213058_u8ur_1379006.png

如何获取ValueStack中的值?

现在 ,我要获取Test2Action(栈顶)的person中的name属性:name:<s:property value="person.name"/>

  以及TestAction中的personTest的name:<s:property value="personTest.name"/>

可以看出,要获取值栈中对象的属性时,直接写属性名就好,无须对象名作为前缀,ognl会自动遍历值栈中所有对象,把属性名字匹配的第一个对象返回给你。

如何获取StackContext中的值?

现在,我要获取person中的name属性:<s:property value="#person1.name"/>

与ValueStack取值不同的是,加上‘#’和左侧的‘key’对象。

213945_gl0t_1379006.png214036_H6Q0_1379006.png

迭代器对以上两个容器的应用。

在迭代器标签中,经常能看见类似的代码

<s:iterator value="#emps">

     <tr>

     <td><s:property value="empname"/> </td>

……

empname是Emp对象的属性,按理来说,不可以直接取属性值。

但实际上,这样做是可以的。

因为,迭代器每从‘emps’中拿一个对象出来,都会临时地把这个对象放到Value Stack的栈顶,用完就把它释放掉,这样显然方便了我们的操作——不然,我们需要这样写代码:

<s:iterator value="#emps" var="temp">

     <tr>

     <td><s:property value="#temp.empname"/> </td>

……

总结:值栈可以让我们把常用的对象都放在里面,不用老是‘#……’, 更方便了我们的开发。

转载于:https://my.oschina.net/u/1379006/blog/189424

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值