Strtus2的值栈(ValueStack)对象[利用了OgnlContext对象]
ValueStack接口,最终在项目中存数据对象是它的实现类OgnlVauleStack
ValueStack数据存储结构:分为List栈(根栈) 和Map栈(非根栈 )
使用OGNL表达式取List栈数据不需要#
非根栈的对象取值我们需要给前面添加#,例如:#request,#session,#application
后台代码:
public String vs(){
//获取ActionContext对象
ActionContext ac = ActionContext.getContext();
//获取值栈对象
ValueStack vs = ac.getValueStack();
//往值栈中存数据
vs.push("abc");
User user = new User(1,"张三",20);
vs.push(user);
vs.push("def");//栈顶
//数据存到域中
ac.getContextMap().put("req_data","req_datas");
ac.getSession().put("session_data","session_datas");
ac.getApplication().put("app_data","app_datas");
return SUCCESS;
}
页面代码
<s:debug></s:debug>
<!-- 取栈顶数据 -->
<s:property value="top"></s:property><br/>
<!-- 直接取值栈内的数据 -->
<s:property value="name"></s:property>
<hr/>
<!-- 域中取 数据 必须加#-->
req:<s:property value="#request.req_data"></s:property>
session:<s:property value="#session.session_data"></s:property>
application:<s:property value="#application.app_data"></s:property>
OGNL表达式
结合struts标签一起使用
<!-- 迭代标签-->
<!-- OGNL表达式 在jsp中创建list集合(不需要#)-->
<s:iterator value="{'tom','jack','lucy'}" var="name">
<s:property value="#name"></s:property>
</s:iterator>
<br/>
<!-- OGNL表达式 在jsp中创建Map集合 (需要#) -->
<s:iterator value="#{'en':'england','ch':'china','jp':'japan'}" var="entry">
<s:property value="#entry.key"></s:property>--<s:property value="#entry.value"></s:property>
</s:iterator>
<br/>
<!-- 判断标签 -->
<s:set var="age" value="21"></s:set>
<s:if test="#age>23">
老了
</s:if>
<s:else>
年轻
</s:else>