码迷,mamicode.com
首页 > 其他好文 > 详细

ValueStack

时间:2018-04-20 23:42:12      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:values   dex   关系   name   stack   key   取数据   work   struts标签   

什么是值栈

值栈就是OGNL表达式存取数据的地方,Struts2是在有请求到达的时候为每个请求创建一个新的值栈,这也就是说值栈和请求是一一对应的,值栈封装了一次请求所需要的所有数据,这种一一对应的关系使值栈能够线程安全地为每个请求提供公共的数据存取服务。

值栈的生命周期

值栈可以作为一个数据的中转站,用于在前台-后台之间传递数据。ValueStack贯穿整个Action的生命周期,每个Action类的对象实例 都拥有一个ValueStack对象,在其中保存当前Action对象和其他相关对象。Struts2框架把ValueStack对象保存在名为”struts.valueStack”的request属性中,也就是说,ValueStack与Action的生命周期保持一致,ValueStack的生命周期是随着request的创建而创建,随着request的销毁而销毁。

一、常用的存储数据的方法        

1、向map栈中存数据,即ValueStack中的context(OgnlContext)            

//通过request,session等向map中存储数据                
ServletActionContext.getRequest().setAttribute("username","joey");                
ServletActionContext.getSession().put("pwd","123");    

 

* 直接向map栈中放数据
ActionContext.getContext().put("msg","how you doing");

2、向对象栈中存数据,即ValueStack中的root(CompoundRoot)对象            

* 先得到root,再把数据压入到root中,这中方式是放入到栈底.                
ValueStack valueStack = ActionContext.getContext().getValueStack();                
valueStack.getRoot().add(new Person());    

  

* 先得到root,利用add(index,Object)把一个对象压入到root中指定位置.                
ValueStack valueStack = ActionContext.getContext().getValueStack();                
valueStack.getRoot().add(0,new Person());//这里0,表示压入栈顶.    

 

* 存放一个map到对象栈中                
ValueStack valueStack = ActionContext.getContext().getValueStack();                
valueStack.set("msg","dude"); //先封装成Map,在把Map放入到对象栈中,且放入栈顶.            

 

* 利用valueStack的push方法把一个对象直接压入栈顶                
ValueStack valueStack = ActionContext.getContext().getValueStack();                
valueStack.push(new Person());

二、在jsp中取Action中的数据

1、取普通属性:

${str} 
//或者用struts标签库 
<s:property value="str"/>

2、取对象数据 

<s:property value="user.id" />//${user.id} 
<s:property value="user.name"/><br/>//${user.name} 
${user.id}${user.name}

3、取List集合中的数据

<s:iterator var="u" value="list">//value为Action集合List对象的名称 
    <s:property value="#u.id"/>//${u.id} 
    <s:property value="#u.name"/><br/>//${u.name} 
</s:iterator>

4、取Map集合中的数据   

<s:iterator var="u" value="map"><!-- u is a entry --> 
    //EL取值 
    <s:property value="#u.key"/>//${u.key} 
    <s:property value="#u.value.id" />//${u.value.id} 
    <s:property value="#u.value.name"/><br/>//${u.value.name} 
</s:iterator>

  

 

<%@ page import="com.opensymphony.xwork2.util.*"%>  
<%    
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");   
List someThing= (List)vs.findValue("someThing");   
%>  

  

ValueStack

标签:values   dex   关系   name   stack   key   取数据   work   struts标签   

原文地址:https://www.cnblogs.com/zhumengke/p/8893697.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!