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文件中有區別

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM