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中的内存结构

struts2 ognl存放数据-LMLPHP

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

05-08 08:18