十九、利用OGNL获取ValueStack中:根栈和contextMap中的数据

时间:2022-09-23 10:50:32
  1. 利用OGNL获取ValueStack中:根栈和contextMap中的数据

    原则:OGNL表达式如果以#开头,访问的contextMap中的数据

    如果不以#开头,是访问的根栈中的对象的属性(List集合)

    1、在动作类中

    public String execute() {

            // 操作ValueStack

            // 从当前线程中获取ActionContext对象

            ActionContext ac = ActionContext.getContext();

            // 获取值栈对象,它由两部分组成。第一部分:集合;第二部分:就是ActionContext中的那个Map

            ValueStack vs = ac.getValueStack();

            // 向根栈的栈顶中放一个Map。如果Map存在,直接取出来用,不存在,则创建一个Map,把p=vsp塞进去

            vs.set("p", "vsp");

     

            // 往传统的三大域范围放东西

            // request

            ServletActionContext.getRequest().setAttribute("p", "rp");

            // session

            ServletActionContext.getRequest().getSession().setAttribute("p", "sp");

            // application

            ServletActionContext.getServletContext().setAttribute("p", "AP");

     

            return
    SUCCESS;

     

        }

     

    2、数据内存结构

     

    十九、利用OGNL获取ValueStack中:根栈和contextMap中的数据

     

    3、在JSP页面中

    <br/> ----显示根栈中的数据----<br/>

        <!-- 从栈顶往下搜索Map的key或者是对象的属性 -->

        <s:property
    value="p"/><br/>

    的元素开始砍出来之后的那个新集合 -->

        <s:property
    value="[0]"/><br/>

        <!--取栈顶的那个对象 -->

        <s:property
    value="[0].top"/><br/>

        

        <br/> ----显示contextMap中的数据----<br/>

        <s:property
    value="#request.p"/>

        <s:property
    value="#session.p"/>

        <s:property
    value="#application.p"/>