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

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

如何用struts标签和ognl 获取 ValueStack 和 Stack Context 中的值_第1张图片

如何获取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’对象。

如何用struts标签和ognl 获取 ValueStack 和 Stack Context 中的值_第2张图片

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

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

<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>

……

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

你可能感兴趣的:(stack,Ognl,context,struts标签,ValueStack)