Struts2基础(四):Struts2的值栈和ognl表达式

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>

         

           

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/86586954