十九、利用OGNL获取ValueStack中:根栈和contextMap中的数据
利用OGNL获取ValueStack中:根栈和contextMap中的数据
原则:OGNL表达式如果以#开头,访问的contextMap中的数据
如果不以#开头,是访问的根栈中的对象的属性(List集合)
1、在动作类中
public String execute() {
// 操作ValueStack
// 从当前线程中获取ActionContext对象
ActionContext ac = ActionContext.getContext();
// 获取值栈对象,它由两部分组成。第一部分:集合;第二部分:就是ActionContext中的那个Map
ValueStack vs = ac.getValueStack();
// 向根栈的栈顶中放一个Map。如果Map存在,直接取出来用,不存在,则创建一个Map,把p=vsp塞进去
vs.set("p", "vsp");
// 往传统的三大域范围放东西
// request
ServletActionContext.getRequest().setAttribute("p", "rp");
// session
ServletActionContext.getRequest().getSession().setAttribute("p", "sp");
// application
ServletActionContext.getServletContext().setAttribute("p", "AP");
return SUCCESS;
}
2、数据内存结构
3、在JSP页面中
<br/> ----显示根栈中的数据----<br/>
<!-- 从栈顶往下搜索Map的key或者是对象的属性 -->
<s:property value="p"/><br/>
<!--不是栈顶对象:从索引为0的元素开始砍出来之后的那个新集合 -->
<s:property value="[0]"/><br/>
<!--取栈顶的那个对象 -->
<s:property value="[0].top"/><br/>
<br/> ----显示contextMap中的数据----<br/>
<s:property value="#request.p"/>
<s:property value="#session.p"/>
<s:property value="#application.p"/>