- 1
- 0
- 约2.86千字
- 约 3页
- 2017-06-13 发布于北京
- 举报
Struts2的ValueStack中的对象栈和Map栈
?(2012-06-25 17:18:11)
HYPERLINK javascript:; 转载▼
标签:?
HYPERLINK /?c=blogq=itby=tag \t _blank it分类:? HYPERLINK /s/articlelist_1449911172_4_1.html \t _blank Web应用开发1、提到Struts2的传值功能时,经常会见到Stack Context和ValueStack等概念,那么它们到底是什么,有什么作用呢。
ValueStack(值栈):Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是
OgnlContext),并将值栈设为OGNL的根对象。
ActionContext:一次Action调用都会创建一个ActionContext??????????????如:ActionContext ctx = ActionContext.getContext();
Stack Object:放入stack中的对象,一般是action。
Stack Context(map):stack上下文,它包含一系列对象,包括request、session、attr、application map等。
2、访问Stack Context中的对象的属性时要使用#对象名.属性名的方式,使用push标签可以将原来位于Stack Context中的对象放到ValueStack的栈顶。用push标签将对象保存在ValueStack的栈顶后,只需要使用属性名就可以直接访问了。如下面的例子:
body?s:bean name=cg.struts.at.User id=user???s:param name=username value=cg/???s:param name=password value=p123/?/s:bean?table border=1 width=80%??tr align=center???td colspan=4用户信息/td??/tr??tr align=center???td用户名:/td???tds:property value=#user.username//td???td密码:/td???tds:property value=#user.password//td??/tr???/table?使用push标签,简化值的访问?s:push value=#user??table border=1 width=80%???tr align=center????td colspan=4用户信息/td???/tr???tr align=center????td用户名:/td????tds:property value=username//td????td密码:/td????tds:property value=password//td???/tr????/table?/s:push/body
3、如果ValueStack栈顶是集合对象的话,通常可以用iterator标签取得位于ValueStack的顶端的集合对象,遍历集合并输出,遍历完成后集合对象会被移出ValueStack。
4、在页面输出ValueStack和Stack Context的方法
???只要在body标签中加入s:debug/,运行时就可以生成相应的链接,点击该链接就可以显示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.pu
原创力文档

文档评论(0)