• ValueStack与ContentMap (ActionContext.getContext().getValueStack().set())


    在方法

    <action name="zilei" class="dtreeAction" method="zilei">
       <result name="listzilei" >/zilei.jsp</result>
       <result name="input">/error.jsp</result>
      </action>

    ActionContext.getContext().getValueStack().set("listzilei", listzilei);

    取值:

    <s:property value="%{#request.listzilei}"/>
              <s:property value="#request.listzilei"/>
              <s:property value="listzilei"/>
              <s:property value="#attr.listzilei"/>
              <%=request.getAttribute("listzilei") %> 
             ${listzilei}

    <s:iterator value="#request.listzilei" id="dtree">

    都可以取到值。

    当保存在contextMap中时:

    ActionContext.getContext().getContextMap().put("listzilei", listzilei);

    取值:用

    <s:property value="listzilei"/>不行

    <s:property value="#session.listzilei"/>不行

    <s:property value="#params.listzilei"/>不行

    下面都可以取到值:

    <s:property value="%{#request.listzilei}"/>
              <s:property value="#request.listzilei"/>
              <s:property value="#attr.listzilei"/>

       <%=request.getAttribute("listzilei") %>

      ${listzilei}

    3:直接用request.setAttribute()

    request.setAttribute("listzilei", listzilei);

    <s:property value="%{#request.listzilei}"/>
             *
              <s:property value="#request.listzilei"/>
              **
             <s:property value="listzilei"/>只有这个不行
              ***
              <s:property value="#attr.listzilei"/>
              ****
              <%=request.getAttribute("listzilei") %> 
              *****
             ${listzilei}

    4,Maprequest:

    Map request1 =  (Map) ActionContext.getContext().get("request");
      request1.put("listzilei", listzilei);

    <s:property value="%{#request.listzilei}"/>
             *
              <s:property value="#request.listzilei"/>
              **
             <s:property value="listzilei"/>不行
              ***
              <s:property value="#attr.listzilei"/>
              ****
              <%=request.getAttribute("listzilei") %> 
              *****
             ${listzilei} 
    ******

    总结:说明getContextMap取值的范围比valueStack大一点。只保存在request的attribute中。而ContextMap与手动request.setAtribute()及Map request是一样的。

    struts2,a页面url传值,,再执行方法,再到b页面,a.jsp?id=33,在b.jsp页面都可以取到值。

    方法中采用

    <action name="delete1" class="dtreeAction" method="delete1">
       <result type="redirect-action" name="success">
                 <param name="actionName">zilei1.action</param>
                 <param name="id">${id}</param>
                 </result>
      </action>

    <s:property value="%{#request.id}"/>
             *
              <s:property value="#request.id"/>
              **
              <s:property value="id"/>不行
              ***
              <s:property value="#attr.id"/>
              ****
              <%=request.getAttribute("id") %> 
              *****
             ${id}

    点击b页面的删除再回到b页面,什么都没有。

    当struts.xml中用${id}时:

    //request.setAttribute("id", id);不行
      //ActionContext.getContext().getValueStack().set("id", id);可以

    //ActionContext就是ognl上下文,是整个上下文最大的一个。e
      //ActionContext.getContext().getContextMap().put("id", id);可以
      //request1.put("id", id);不行

    当struts.xml中用${request.id}时:

    request.setAttribute("id", id);可以
      ActionContext.getContext().getValueStack().set("id", id);可以

    ActionContext就是ognl上下文,是整个上下文最大的一个。e
      ActionContext.getContext().getContextMap().put("id", id);可以
      request1.put("id", id);可以

    都可以的。

    总结:ContextMap在struts.xml文件中可以取到值。用valuestack无法取到值

    OgnlValueStack类包含两个重要的属性,一个root和一个context。其中root本质上是一个ArrayList,而context是一个Map(更确切的说是一个OgnlContext对象)。

    也就是说:Map的范围更大,所以不带#有事就取不到。一条竖着的都是map类型

    OgnlValueStack类的主要属性关系图如下:

                                                               |
                                                              |--application
                                                              |
                                                               |--session
    context map (OgnlValueStack属性)--|
                                                              |--value stack (OgnlValueStack的root属性,实际是个ArrayList)
                                                              |
                                                              |--request
                                                              |
                                                              |--parameters
                                                              |
                                                              |--attr (searches page, request, session, then application scopes)

    OgnlValueStack是ActionContext的基础

    暂时就把ContextMap和valueStack当成一样就行了,在.xml文件中有区别

  • 相关阅读:
    java中split()特殊符号"." "|" "*" "" "]"
    AJAX传递数组
    d3.js+svg的树形图
    d3.js之树形折叠树
    echarts之bootstrap选项卡不能显示其他标签echarts图表
    mysql 将时间戳与日期时间的转换
    ztree使用
    EL表达式之sessionScope
    struts2配置文件中的method={1}详解
    XML创建与解析常用方法介绍
  • 原文地址:https://www.cnblogs.com/uoar/p/6765104.html
Copyright © 2020-2023  润新知