1.值栈:valueStack
(1).什么是值栈:客户端发起请求,创建action的时候,不可避免的会产生一些数据,而这些数据总需要存储起来吧,值栈就是存储这些数据的一个内存结构
(2).生命周期:一次请求
(3).值栈的内存结构:既然值栈是存储数据的,那它是怎么安放数据的呢,它的结构是什么样呢?
值栈=对象栈+Map栈
对象栈数据结构是ArrayList,Map栈是由一个ArrayList和一个HashMap构成。所有Map栈可以认为是一个对象栈+Map
Map栈的HashMap中自带三个域:request,session,application
Map栈除了自带三个域,还可以自己添加对象和数据
(4).对值栈的操作
^1.如何获取值栈(方法有三)
%1.ActionContext.getContext().getValueStack();
%2.ServletActionContext.getValueStack(ServletActionContext.getRequest());
%3.(ValueStack)ServletActionContext.getRequest().getAttribute("struts.valueStack");
^2.如何将值放到request域,session域和application域
ServletActionContext.getRequest().setAttribute("request","request");
ServletActionContext.getRequest().getSession().setAttribute("session","session");
ServletActionContext.getServletContext().setAttribute("application","application");
^3.在Map栈中添加对象和数据(方法有二)
%1.ActionContext.getContext().put("aa","aa");
%2.ActionContext.getContext().getValueStack().getContext().put("bb","bb");
^4.将数据放到对象栈
%1.放到栈底
&1.valueStack.getRoot().add("aa");
%2.放到栈顶(方法有三)
&1.valueStack.push("aa");
&2.valueStack.getRoot().add(0,"a");
&3.valueStack.set("aa","bb");
^5.获取栈顶元素(方法有二)
%1.valueStack.peek();
%2.valueStack.getRoot().get(0);
^6.弹出栈顶元素(方法有二)
%1.valueStack.pop();
%2.valueStack.getRoot().remove(0);
2.ognl表达式
我们已经知道,值栈是用来存储数据的的一种数据结构,但是怎么把值栈里的数据在前台显示呢?这就需要ognl表达式帮忙了。
(1).jsp中引入:<%@ taglib uri="/struts-tags" prefix="s">
(2).显示map栈不同域的对象(方法有两种)
^1.<s:property value="#request.aa / #session.aa / #application.aa">
^2.<s:property value="#request['aa'] / #session['aa'] / #application['aa']">
(3).显示对象栈的方法
<s:property value="username">
(4).迭代标签
<s:iterator value="#plist"><s:property value="pid"/></s:iterator>
<s:iterator value="#map"><s:property value="key"/><s:property value="value.pid"></s:iterator>
(5).奇偶,行数,if判断
<s:iterator value="#plist" var="aa" status="statu">
<s:property value="#statu.even?'even':'odd'">
<s:property value="#statu.count"/>
<s:if test="#statu.even">偶</s:if>
<s:elseif test="#statu.odd">奇</s:elseif>
</s:iterator>
3.UI标签
(1).在struts.xml中加入:<constant name="struts.ui.theme" value="simple">就不会自动添加table,tr,td等元素了
(2).对象栈回显依靠name属性,Map栈回显依靠value属性
(3).value不可直接跟ognl表达式的:s:password s:textfield s:textarea,他们是这样显示的:value="%{ognl}"
(4).下拉框标签:
<s:select name="pid" list="#list" listKey="pid" listValue="pname" headKey="" headerValue="请选择"></s:select>
(5).多选框:
<s:checkboxlist name="pid" list="#list" listKey="pid" listValue="pname"></s:checkboxlist>