zoukankan      html  css  js  c++  java
  • 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>
    复制代码
  • 相关阅读:
    设计模式--工厂模式
    docker
    学习的网址
    showslow小记
    .Net学习线路图
    《掌握软件测试九大技术》
    Apache和Tomcat
    Visual Studio 2017 更新到15.3后 提示错误:包含了重复的“Compile”项 的解决方法
    Asp.Net Core MVC项目实现多语言(Globalization/Localization)
    7月23日 会议纪要(项目有重要变动)
  • 原文地址:https://www.cnblogs.com/xtdxs/p/6527372.html
Copyright © 2011-2022 走看看