问题:OgnlContext与ValueStack对象的关系?
希望大家带着这样一个问题来看这篇博客。
ValueStack对象,即值栈对象。
一、值栈对象:是整个struts数据存储的核心,或者叫中转站。
二、分析:
1、用户每次访问struts的action,都会创建一个Action对象、值栈对象、ActionContext对象。
2、然后把Action对象放入值栈中。
3、最后再把值栈对象放入request中,传入jsp页面。(key: struts.valueStack)。
4、开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象。(ActionContext是给开发者用的,便于学习与使用。)
三、获取值栈对象的两种方式:
四、值栈对象的存储数据的原理:
1、ValueStack vs
2、数据
分析:
五、ValueStack存储根元素数据、非根元素数据详解
1、图示:
2、存储根元素数据:
ValueStack vs = ac.getValueStack();
/*********操作根元素的三种方法********/
//设置数据:入栈
//方式一:
//vs.getRoot().push(new User(77,"Lucy"));
//方式二:
//vs.push(new User(77,"Lucy"));//向栈顶加入元素
//vs.pop(); //移除栈顶元素
//方式三:
//如何存储?以map结构存储 在jsp页面取数据的形式:user1.userName
vs.set("user1", new User(77,"Lucy"));
vs.set("user2", new User(777,"Lily"));
3、存储非根元素数据:
ActionContext ac = ActionContext.getContext();
/*********操作非根元素的两种方法********/
//映射数据
//#session--->{session=session_data}
//#session.session--->session_data
ac.getContextMap().put("request", "request_data");
ac.getSession().put("session", "session_data");
ac.getApplication().put("application", "application_data");
//数据存储request
Map<String,Object> map = (Map<String, Object>) ac.get("request");
map.put("request", "request_data");
六、总结在jsp页面获取根元素数据与非根元素数据取值
代码实现:
结果展示: