
Struts2的ValueStack中的对象栈和Map栈.docx
3页Struts2 的 ValueStack 中的对象栈和 Map 栈(2012-06-25 17:18:11)转 载 ▼标签: it分类: Web 应用开发1、提到 Struts2 的传值功能时,经常会见到 Stack Context 和 ValueStack 等概念,那么它们到底是什么,有什么作用呢ValueStack(值栈):Struts2 将 OGNL 上下文设置为 Struts2 中的 ActionContext(内部使用的仍然是OgnlContext),并将值栈设为 OGNL 的根对象ActionContext:一次 Action 调用都会创建一个 ActionContext如:ActionContext ctx = ActionContext.getContext();Stack Object:放入 stack 中的对象,一般是 actionStack Context(map):stack 上下文,它包含一系列对象,包括request、session、attr、application map 等2、访问 Stack Context 中的对象的属性时要使用"#对象名.属性名"的方式,使用 push 标签可以将原来位于 Stack Context 中的对象放到 ValueStack 的栈顶。
用 push 标签将对象保存在 ValueStack 的栈顶后,只需要使用"属性名"就可以直接访问了如下面的例子:用户信息用户名:密码:使用 push 标签,简化值的访问用户信息 用户名:密码:3、如果 ValueStack 栈顶是集合对象的话,通常可以用 iterator 标签取得位于ValueStack 的顶端的集合对象,遍历集合并输出,遍历完成后集合对象会被移出ValueStack4、在页面输出 ValueStack 和 Stack Context 的方法只要在标签中加入,运行时就可以生成相应的链接,点击该链接就可以显示 stack 相关信息5、在 Action 中获得 ActionContext、request、session、application 对象的方法5.1 缺省情况下,Struts2 的 Action 类是从 ActionSupport 类继承过来的,因此,可以用下面的语句获得 ActionContext 对象ActionContext ctx = ActionContext.getContext();ctx.put(("address","上海");5.2 如果想要在 Action 类中使用 request 对象,最简单的方法就是在定义类的时候实现 ServletRequestAware 接口。
然后就可以直接在 execute()方法中使用 request 对象,例如:request.setAttribute("address","上海");5.3 如果想要在 Action 类中使用 session 对象,就要在定义类的时候实现SessionAware 接口然后就可以直接在 execute()方法中使用 session 对象例如:session.put("address","上海");5.4 当需要在 Action 类中使用 application 对象时,在定义类的时候要实现ServletContextAware 接口然后可以直接在 execute()方法中使用 application 对象例如:application.setAttribute("address","上海");6、在 jsp 中用 OGNL 表达式获取不同范围的值6.1 获取地址后面的参数信息(即上海)(http://localhost:8080/strutslogin/login.action?address=上海)的方法如下:6.2 获取上述 request 中信息的方法如下:6.3 获取上述 session 中信息的方法如下:6.4 获取上述 application 中信息的方法如下: 6.5 使用"#attr.参数名"的方法访问各种变量的顺序是:request>session>application 。












