【struts基础】Struts2的值栈学习

       值栈?

        它是一个轻量级的数据存储中心,为struts2的action,拦截器等服务,这样可以统一管理数据。我们每一次的请求就会创建一个新的值栈,它封装了每一次请求的操作。当然我们在值栈中的命名也是很重要的,相同类型的命名要保持唯一,这样在找值的时候才会迅速,准确。


             

  

   ValueStack


   如何放入到值栈中:


        它是狭义的值栈,主要是用来存放EL表达式或者是OGNL表达式的数据。

        当我们在action中将数据放入到值栈中的时候,在jsp页面运用EL标签或者是OGNL标签就可以轻松的取出结果来,展现到页面上。

        当我们在jsp页面中运用一些标签产生了很多的数据或者是很多的变量的时候,比如我们的<s:iterator/>标签,这样数据都将放在值栈中。

        jsp和action中传递参数很多时候都是用实体来传递的,当我们定义个user实体,获取他的get、set方法的时候,这个user实体就存放到了值栈中,在jsp页面就可以通过user.id等来获取,同理,当我们运用反射,实现ModelDriven接口的时候,我们的getmodel方法就会 将相对应的对象保存在值栈中,然后在jsp页面很容易的取到。

        我们可以ActionContext.getContext().getValueStack().push(user),将一个变量传入到值栈中。


   如何从值栈中取出:

         jsp中我们有很多的标签:<s:property value=""/> ,比如用#/{}等符合取出,

         使用top语法,比如[1].top.name。

         用OGNL来获取值栈。

         在拦截器中用valueStack.findValue("user")来获取值栈。


   ActionContext


         它是action运行的上下文,是一个基本的容器,里面可以装很多的会话、参数等。每一个线程都有唯一的actioncontext,所以它是线程安全的。

          ActionContext是放数据的,他其实就是个map,用key和value来映射关系。例如我们可以用ActionContext.getContext().put("roleList", roleList);将这个key value的东东放入进去。

具体用法如下:

          request的parameters: 请求中的参数,当前http请求参数的map

              例如: #parameters.id[0] 就是 request.getParameter("id")

          request的attribute:请求中的属性 ,包含当前httpservletRequest的属性

              例如: #request.userName 就是 request.getAttribute("userName")

          application的attribute:应用的属性  

          session:session.getAttribute("user")


      如希望访问值栈中Map中的数据,需要在表达式加上一个前缀#,如果没有前缀#,则将在对象栈里进行。

      期待更多的理解。


          

    

         

         




          

         



        


        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值