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