运行后的结构图为:
从图中可以很明显看出新创建的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
主要步骤: 在action中
public String testScope() { // 把字符串\放入到request域中 ServletActionContext.getRequest().setAttribute(\ \ // 把字符串\放入到session域中 ServletActionContext.getRequest().getSession().setAttribute( \ // 把字符串\放入到application域中 ServletActionContext.getServletContext().setAttribute( \ return \ }
在页面中:
<%@ page language=\<%@ taglib uri=\ //导入struts2的标签 ognl表达式关于scope(request,session,application)的输出 14.10.3.2 用法2 OGNL会设定一个对象(root对象),在struts2中根对象就是CompoundRoot,或者为OgnlValueStack中的root,通常被叫做ValueStack(值栈或者对象栈),如果要访问根对象的属性,则可以省略去#,直接访问对象的属性即可。 在action中 public String testObjectValue(){ //得到ognl的上下文 ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.set(\ return \ } 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库struts2(8)在线全文阅读。
request:
相关推荐: