struts2中的值棧對象ValueStack


ValueStack, 即值棧對象。

值棧對象:

         是整個struts數據存儲的核心,或者叫中轉站。

         用戶每次訪問struts的action,都會創建一個Action對象、值棧對象、ActionContext對象;  然后把Action對象放入值棧中; 最后再把值棧對象放入request中,傳入jsp頁面。

(key: struts.valueStack);     開發者只需要通過ActionContext對象就可以訪問struts的其他的關鍵對象。 (ActionContext是給開發者用的,便於學習與使用。)

 

一。獲取值棧對象的兩種方式:

復制代碼
// 獲取值棧對象,方式1:
        HttpServletRequest request = ServletActionContext.getRequest();
        ValueStack vs1 = (ValueStack) request.getAttribute("struts.valueStack");
        
        // 獲取值棧對象,方式2: 
        ActionContext ac = ActionContext.getContext();
        ValueStack vs2 = ac.getValueStack();
        
        System.out.println(vs1 == vs2);//true
復制代碼

 

二。值棧對象的存儲數據的原理

復制代碼
ValueStack vs = ac.getValueStack();
        /***************操作根元素的幾種方法*****************/
        // 設置數據: 入棧
        //vs.push(new User(1002,"Tom"));    // 棧頂
        //vs.pop();                        // 移除棧頂元素
        
        // 如何存儲?  map結構存儲  
        //vs.set("user1", new User(1,"Jacky1"));
        //vs.set("user2", new User(2,"Jacky2"));
        
復制代碼

 

復制代碼
public class OgnlDemo3 extends ActionSupport{
    
    
    @Override
    public String execute() throws Exception {
        
        // 測試迭代標簽
        
        List<User> list = new ArrayList<User>();
        Map<Integer,User> map = new HashMap<Integer, User>();
        
        // 初始化
        for (int i=1; i<11; i++) {
            User user = new User(i,"Jack" + i);
            
            list.add(user);
            map.put(user.getId(), user);
        }
        
        // 保存到request中,是非根數據  取值時候要加#
        ActionContext.getContext().getContextMap().put("list", list);
        ActionContext.getContext().getContextMap().put("map", map);
        return super.execute();
    }
    
    
    
}
復制代碼

 

復制代碼
 <body>
    <br/>一、. list迭代</br>
    <table border="1">
        <tr>
            <td>編號</td>
            <td>名稱</td>
        </tr>
          <s:iterator var="user" value="#request.list" status="st">
              <tr class=<s:property value="#st.even?'even':'odd'"/> >
                  <td><s:property value="#user.id"/></td>
                  <td><s:property value="#user.name"/></td>
              </tr>
          </s:iterator>
      </table>
      
       <br/>二、迭代map</br>
    <table border="1">
        <tr>
            <td>編號</td>
            <td>名稱</td>
        </tr>
          <s:iterator var="en" value="#request.map" status="st">
              <tr>
                  <td><s:property value="#en.key"/></td>
                  <td><s:property value="#en.value.name"/></td>
              </tr>
          </s:iterator>
      </table>
      
      
      <!-- Ognl表達式可以取值,也可以動態構建集合 -->
  </body>
復制代碼

 

復制代碼
<body>
    <br/>一、.構建 list集合</br>
    <s:iterator var="str" value="{'a','b'}">
        <s:property value="#str"/>
    </s:iterator>
    
     <br/>一、.構建 map集合</br>
     <s:iterator var="en" value="#{'cn':'China','usa':'America'}">
         <s:property value="#en.key"/>
         <s:property value="#en.value"/>  <br/>
     </s:iterator>
    
  </body>
復制代碼

 

復制代碼
<body>
      <!-- 頁面: 必須要拿到ValueStack -->
      
     <br/>1. 取根元素的值<br/>
     <s:property value="user.id"/> 
     <s:property value="user.name"/> 
     <s:property value="user.address"/> 
     <s:property value="user.address.city"/> 
     <s:property value="user.address.province"/> 
     
      <br/>2. 取非根元素的值<br/>
      <s:property value="#request.cn"/>
      <s:property value="#session.Session_data"/>
      <s:property value="#application.Application_data"/>    <br/>
     
      <!-- 自動找request/session/application,找到后立刻返回 -->
      <s:property value="#request_data"/>
      <s:property value="#attr.Session_data"/>
      <s:property value="#attr.Application_data"/>  <br/>
      
      <!-- 獲取請求的參數數據 -->
      <s:property value="#parameters.userName"/>
     
     <!-- struts的調試標簽:可以觀測值棧數據 -->
     <s:debug></s:debug>
  </body>
復制代碼


免責聲明!

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



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