ValueStack对象:
ValueStack, 即值栈对象。
值栈对象:
是整个struts数据存储的核心,或者叫中转站。
用户每次访问struts的action,都会创建一个Action对象、值栈对象、ActionContext对象; 然后把Action对象放入值栈中; 最后再把值栈对象放入request中,传入jsp页面。
(key: struts.valueStack); 开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象。 (ActionContext是给开发者用的,便于学习与使用。)
public class OgnlDemo2 extends ActionSupport{ // 根元素值 private User user = new User(100,"Jacks"); public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { ActionContext ac = ActionContext.getContext(); // 映射数据 ac.getContextMap().put("request_data", "request_data"); // 数据存储request // Map<String,Object> map = (Map<String, Object>) ac.get("request"); 得到request对象 // map.put("request_data", "request_data"); // map.put("cn", "China"); ac.getSession().put("Session_data", "Session_data"); ac.getApplication().put("Application_data", "Application_data"); // 二、值栈对象的存储数据的原理 ValueStack vs = ac.getValueStack(); /***************操作根元素的几种方法*****************/ // 设置数据: 入栈 //vs.push(new User(1002,"Tom")); // 栈顶 //vs.pop(); // 移除栈顶元素 // 如何存储? map结构存储 //vs.set("user1", new User(1,"Jacky1")); //vs.set("user2", new User(2,"Jacky2")); return super.execute(); } // 一、获取值栈对象的2种方式 private void getVs() { // 获取值栈对象,方式1: HttpServletRequest request = ServletActionContext.getRequest(); ValueStack vs1 = (ValueStack) request.getAttribute("struts.valueStack"); // 获取值栈对象,方式2: ActionContext ac = ActionContext.getContext(); ValueStack vs2 = ac.getValueStack(); System.out.println(vs1 == vs2);//true } }