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方法把一个对象放入到对象栈的栈顶

原文地址:https://www.cnblogs.com/callyblog/p/7531492.html