Struts2--ValueStack(值栈)

2 篇文章 0 订阅
1 篇文章 0 订阅

Struts2–ValueStack(值栈)

简介
  • 1.ValueStack实际上就是一个容器,实现一个接口,实现类为ognlValueStack
  • 2.是所有数据的一个汇总
  • 3.struts框架中的数据都保存在valueStack中,不存放到域当中(其实域当中的数据也存放在值栈当中的非根区)
  • 4.valueStack贯穿整个actoin的生命周期,action一旦创建就会创建一个valueStack对象
  • 5.将数据存放到值栈当中的好处是任何地方均可以去除其中的数据
值栈方法示例
  • 1.创建struts2升级新方法

    • 1).复制lib目录(jar包)WEB-INF中
    • 2).复制resource文件到工程目录之下,并Make as…---->Resource root
    • 3).配置前端的控制器
  • 创建前端jsp 向后端发送数据(传参数)

    <a href="hello.action?name=T恤&price=888.0">aaa</a>
    
  • 2.创建domain实体类,接收参数(这样才能够将接收到的参数封装成对象)

  • 3.创建Action

    public class HelloAction extends ActionSupport implements ModelDriven<Goods>{
    	//实现接口中的方法和execute方法
    }
    
  • 4.配置strtus.xml

向valueStack值栈中存放数据
  • 向根区中存放数据

    public class HelloAction extends ActionSupport implements ModelDriven<Goods> {
        private Goods goods = new Goods();
    
        @Override
        public Goods getModel() {
            return goods;
        }
    
        public String execute(){
            //获取值栈
            /**
             * 值栈分为根区和非根区(root和context)
             * 根区:存放当前action相关数据都存放到根区
             * 非根区:存放一些整个程序的相关数据 相关域:req、session、application
             */
            //获取完成之后就可以操作值栈(往域当中存放一些数据就可以直接存放到值栈当中)
            ValueStack valueStack = ActionContext.getContext().getValueStack();
    
    
            //往值栈当中存放数据 -----------------------------根区
            /*创建对象*/
            Goods goods = new Goods();
            goods.setName("鸡蛋");
            goods.setPrice(12.3);
            /*入栈的操作 内部是一个栈结构*/
            valueStack.getRoot().push(goods);
            /*把栈顶的元素出栈 出栈的为栈顶的元素(就会删除掉goods)*/
            //valueStack.getRoot().pop();	
    
            //打印封装的参数
            System.out.println(this.goods);
            return SUCCESS;
        }
    
  • 向非根区中存放数据

    public class HelloAction extends ActionSupport implements ModelDriven<Goods> {
        private Goods goods = new Goods();
    
        @Override
        public Goods getModel() {
            return goods;
        }
    
        public String execute(){
            //获取值栈
            /**
             * 值栈分为根区和非根区(root和context)
             * 根区:存放当前action相关数据都存放到根区
             * 非根区:存放一些整个程序的相关数据 相关域:req、session、application
             */
            //获取完成之后就可以操作值栈(往域当中存放一些数据就可以直接存放到值栈当中)
            ValueStack valueStack = ActionContext.getContext().getValueStack();
    
            //往域当中写入一些数据(域中对象存放在值栈当中) 往----------------------------非根区域中存数据
            /*往req域中写入数据*/
            ActionContext.getContext().put("reqName","reqValue");
            /*往session域当中写入数据*/
            ActionContext.getContext().getSession().put("sessionName","sessionValue");
            /*往application域当中写入数据*/
            ActionContext.getContext().getApplication().put("applicationName","applicationValue");
    
            return SUCCESS;
        }
    
从valueStack(值栈中取出数据展示到jsp界面)
  • 配置返回结果页(struts.xml中配置result)
  • 在返回的结果页中获取debug信息
    很重要:因为值栈中的信息全部都可在debug当中获得
    • 1).配置struts.xml(在package外面配置常量)
      	<constant name="struts.devMode" value="true" />	
      
    • 2).在jsp中引入Strtus中debug标签库
         <%@ tiglib uri="struts-tag" prefix="c" %>
         再在body界面的body中加入:
         <%c:debug></s:debug>
         添加完成之后就可以在界面中看到debug,点击进入就能够看到所有值栈中的信息了		   
      
    • 3).取值栈中的信息到jsp界面
      <%--取根元素中的数据:  value里面写的就是ognl表达式  根区中取数据只能取栈顶的元素(明确栈的结构)    直接按照字段(domain中的字段名)就可以取出值--%>
          <s:property value="name"/>
          <%--取非根元素     value里面是ognl表达式     根据key值取出里面的数据       注意一要在key值前面加上的#号--%>
          <%--req域中取数据--%>
          <s:property value="#reqName"/>
          <%--session域中取数据--%>
          <s:property value="#session.sessionName"/>
          <s:property value="#application.applicationName"/>
          <br>
          <%--在页面当中使用ognl 调用方法 普通的方法--%>
          <s:property value="'hello'.length()"/><br>
          <%--调用静态的方法 使用之前要配置一个常量--%>
         <%--配置方法为:在struts.xml中的package外添加<constant name="struts.ognl.allowStaticMethodAccess" value="true" />即可--%>
          <s:property value="@java.lang.Math@random()"/>
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值