14.6.2 值栈中存数据
14.6.2.1 方法1
/* * 把对象放入到值栈中 */ //方法一:先得到root,把一个对象压入到root中 ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.getRoot().add(new Person()); valueStack.getRoot().add(new Student()); 运行以后的值栈结构图:
从内存图中可以看出最后被压入到list中的对象在最下面。
图为ArrayList中的add方法的解释: 追加的指定的元素放到集合的最下面。
14.6.2.2 方法2
/* * 方法二:先得到root,利用add(index,Object)把一个对象压入到root中 * 这里index指的是集合中的位置 */ ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.getRoot().add(new Person()); valueStack.getRoot().add(0, new Student());
运行后的结构图为:
从图中可以很明显看出新创建的Student对象被放到了第一个位置,因为 Index的值为0,所以是第一个位置。
14.6.2.3 方法3
把一个键值对存放在对象栈中,做法为: /* * 方法三: * 把一个键值对存放在对象栈中 */ ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.set(\ 对象栈图为:
从图中可以看出上面的代码执行过程为:
1、 先把”msg”和”msg_object”两个字符串封装成Map 2、 再把封装以后的Map放入到对象栈中。
14.6.2.4 方法4
/* * 方法4 * 利用ValueStack的push方法可以把一个对象直接压入对象栈的第一个位置 */ ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.push(new Person());
执行完push方法以后,对象栈的情况如下:
Push方法把新创建的Person对象放入到了对象栈的首个位置。
14.7 OGNL Context
14.7.1 说明
1、 上图为OGNL Context的结构图
2、 当struts2接受一个请求时,会迅速创建ActionContext,ValueStack,action。然后
把action压入到值栈中。所以action的实例变量可以被ognl访问。所以利用ognl表达式可以访问action。
14.8 ActionContext
/* * ActionContext的作用 */ ActionContext.getContext().getSession().put(\ActionContext.getContext().getSession().put(\ValueStack valueStack = ActionContext.getContext().getValueStack(); 14.8.1 说明
从上面的代码中可以看出来,struts2中的ActionContext的作用是提供了对ognl数 据的操作。并且可以通过ActionContext获取到经过struts2封装了的session等参数。
14.9 ServletActionContext
/* * 返回servlet中的request和servletcontext */ ServletActionContext.getRequest().setAttribute(\ServletActionContext.getRequest().setAttribute(\ServletActionContext.getServletContext(); //得到ActionContext ServletActionContext.getContext(); 14.9.1 说明
1、 可以通过ServletActionContext得到servlet中的一些类,比如
HttpServletRequest,ServletContext等
2、 可以通过ServletActionContext返回ActionContext
14.10 Ognl表达式 14.10.1 简述
从9.6到9.9讨论了ognl的结构、如何存数据。9.10重点讨论如何把ognl结构中的数据呈现在页面上。所以Ognl表达式的作用就是把OgnlContext中的数据输出到页面上。
14.10.2 el表达式例子
参照课堂演示例子
14.10.3 ognl表达式例子
14.10.3.1 用法1(#号用法)
说明:
1、 访问OGNL上下文和action上下文,#相当于ActionContext.getContext(); 2、 如果访问的是map中的值而不是对象栈中的值,由于map中的数据不是
根对象,所以在访问时需要添加#前缀。 名称 parameters request 作用 包含当前HTTP请求的Map 包含当前HttpServletRequest属性的Map 包含当前HttpSession属性的Map 包含当前ServletContext属性的Map 用于按照request>session>application顺序访问其属性
注:也可以写为#request[?username?] #sesssion[?username?] #application[?username?]
例子 #parameters.id[0]=request.getParameter(“id”) #request.username=request.getAttribute(“username”); #session.username=session.getAttribute(“username”); #application.username=application.getAttribute(“username”); #attr.username相当于按照顺序在以上三个范围内读取username的属性,直到找到为止。 session application attr
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库struts2(7)在线全文阅读。
相关推荐: