struts2 ognl存放数据

ongl存放数据可以存放在对象栈(root),也可以存放在map中

一、存放在map中

  1.存放在map中可以分为存放在request、session、application

	public String testPutDataToValueStack(){
		/*
		 * 1.往request,session,application域中存放数据
		 * 2.观察内存结构
		 */
		ServletActionContext.getRequest().setAttribute("request_username", "username");
		ActionContext.getContext().getSession().put("session_username", "username");
		ServletActionContext.getServletContext().setAttribute("application_username","username");

		ValueStack valueStack = ActionContext.getContext().getValueStack();
		Object object = valueStack.getContext().get("request");
		System.out.println(object);
		return SUCCESS;
	}

  

存放到request、session、application后valuestack的map中的内存结构

  2.存放在map中的其他Entry中

	public String testStringToMap(){
		ActionContext.getContext().put("msg", "msg");
		ValueStack valueStack = ActionContext.getContext().getValueStack();
		Object object = valueStack.getContext().get("msg");
		System.out.println(object);
		return SUCCESS;
	}

  

二、存放在对象栈中(root)

  1.使用add方法存放

	public String testObjectToRoot(){
		Person person=new Person();
		person.setName("cally");
		CompoundRoot root = ActionContext.getContext().getValueStack().getRoot();
		root.add(person);
		//还一个指定存放位置,放0表示存放在栈顶
		root.add(0, new Person());

		//放入对象以后,加入的对象在root中的最后一个,原来有两个,因为root继承了ArrayList,所以就具有List中的属性
		Object object = root.get(2);
		System.out.println(((Person)object).getName()+"--"+root.size());
		return SUCCESS;
	}

  

  2.使用set方法存放

	public String testObjectToRoot2(){
		ValueStack valueStack = ActionContext.getContext().getValueStack();
		CompoundRoot root = valueStack.getRoot();
		root.set(0, new Person());
		return SUCCESS;
	}

  

  3.使用push方法进行存放

	public String testObjectToRoot3(){
		ValueStack valueStack = ActionContext.getContext().getValueStack();
		CompoundRoot root = valueStack.getRoot();
		root.push(new Person());//调用push方法,把对象压入到对象栈顶
		return SUCCESS;
	}

  

总结:

1、可以利用reqeust,session,application把一个数据放入到ValueStack的map中

2、可以利用ActionContext.getContext().put方法把一个数据放入到map中

3、可以利用ValueStack.getRoot().add(object)方法把一个对象放入到对象栈中(栈底)

4、可以利用ValueStack.getRoot().add(index,object)可以把一个对象放入到对象栈中 (index)指定位置

5、可以利用valueStack的set方法把对象放入到栈顶,放入到栈顶的是一个HashMap 6、可以利用valueStack的push方法把一个对象放入到对象栈的栈顶

时间: 2024-10-12 16:31:29

struts2 ognl存放数据的相关文章

Struts2 OGNL

OGNL(Object-Graph Navigation Language)的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能. 1.OGNL表达式的计算是围绕OGNL上下文进行的. OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示.它里面可以存放很多个Ja

转载:深入了解Struts2返回JSON数据的原理及具体应用范例

早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身, 渐渐的也淡忘了此事.直到前两天有同事在工作中遇到这个问题,来找我询问,我又细细地给他讲了一遍之后,才觉得无论如何要抽一个小时的时间来写这篇文章, 从头到尾将Struts2与JSON的关系说清楚. 其实网络中,关于这个问题的答案已是海量,我当初也是从这海量的答案中吸收精华,才将“Struts2返回JSON数据”这个问题搞清楚的.但 是这些海量的答案,有一个共同

存储过程存放数据方式

存储过程存放数据的方式主要有: 1.将数据存放到文件中:select c_content into outfile 'D:\\action.properties'; 2.将数据保存到数据库中: 存储过程的功能非常强大,在某种程度上甚至可以替代业务逻辑层.

代码段中存放数据

1.前面我们写的程序中,只有一个代码段,我们先来在代码段中使用数据,看看和单独一个数据段存放数据有什么差别. 考虑这样一个问题,编程计算以下8个数据的和,结果存放在ax寄存器中: 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H 我们希望循环进行累加,所以要将数据存放在一个连续内存当中,如何将这些数据存储在一组地址连续的内存单元中呢?我们可以用指令一个一个将他们送入地址连续的内存单元,可是这样又存在一个问题,到哪里去找这段内存空间? 从规范的角度讲,

plist 文件 存放数据

plist文件 存放数据 plist文件用途: 直接将数据写在代码里,不是一种合理的做法,如果数据经常改动,就要经常修改代码,造成代码扩展性低 因此,可以考虑将经常变动的数据放在文件中进行存储,程序启动后从文件中读取最新的数据,如果要变动 数据,可以直接去修改数据文件,不必修改代码 一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种属性列表文件的扩展名是plist //获取plist路径 ,一个NSBundle就是一个文件夹 //利用mainBundle就可以

链表/堆栈(【常用方式】头节点不存放数据的方式)(C语言版)

常用的链表/堆栈 都是先 生成一个头指针head 再用头指针 申请一个 头节点空间,然后 头节点 的Data 一般是不储存数据的 , { 当用 malloc函数分配内存后head就变为了名叫head的节点了.而不在是一个单独的指针了 } { 注意只要用malloc申请的空间 才能使 指针再 下次循环 指向不同的 内存空间 ,即每次申请的内存 地址都是一定不相同的,除非free了 这个内存空间,否则不可能再次被使用  } 当为链表/堆栈 为空时 则头节点 head->Next=NULL;否则则指向

5. SOFAJRaft源码分析— RheaKV中如何存放数据?

概述 上一篇讲了RheaKV是如何进行初始化的,因为RheaKV主要是用来做KV存储的,RheaKV读写的是相当的复杂,一起写会篇幅太长,所以这一篇主要来讲一下RheaKV中如何存放数据. 我们这里使用一个客户端的例子来开始本次的讲解: public static void main(final String[] args) throws Exception { final Client client = new Client(); client.init(); //get(client.get

ValueStack和OGNL达到Struts2形式的数据存储原理

(1)最近学习struts相框,我们在快乐struts强大.为了便于使用转发,但不了解详细的内部数据存储: (2)网上找了很多关于struts数据存储的原理,但我还没有找到一个具体的解释,本书上找到了 ValueStack和OGNL实现Struts2表单数据的存储原理 特分享给大家! (3)下面是部分截图:解说了关于struts框架中数据表单等的存储! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc=/font/5a6L5

struts2 ognl表达式访问值栈

1:简单的说,值栈是对应每一个请求对象的轻量级的数据存储中心,在这里统一管理着数据,供Action.Result.Interceptor等Struts2的其他部分使用,这样数据被集中管理起来而不凌乱. 简单的说,值栈能够线程安全的为每个请求提供公共的数据存取服务. 当有请求的时候,Struts2会为每个请求创建一个新的值栈,也就是说,栈和请求是一一对应的,不同的请求,值栈也不一样,而值栈封装了一次请求所有需要操作的相关的数据. 正是因为值栈和请求的对应关系,因此值栈能保证线程安全的为每个请求提供