论坛首页 Java企业应用论坛

使用ValueStack或者ActionContext?

浏览 18227 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-10-09  
我来总结一下把:
webwork中变量的存放有两种方式
1 web app通用的方式,即是:放入sesson,request ,application scope 中
  struts是这么作的,绝大多数标签库,框架,都是在这里存放对象供应用程序共享、访问的。在EL中只能访问这些scope变量(如:${anObject})
  但这种访问方式(如果不加以封装)有一个弊端:应用程序必需依赖servlet容器的API(tomcat就是common目录下的sevlet.jar),这给应用程序的调试增加了难度。
2 如果对这些对象(request,session...)加以封装,就会极大地方便web应用程序的开发,一般的做法就是将这些scope中的对象放到map中。webwork就是这么作的,这种封装很普遍(如:Jpetstore也简单地实现了scope的封装),做起来也不难。但作为一个框架,webwork为了能让用户灵活访问这些sope
做了个valuestack。action运行中的上下文,以及webwork中所有阶段(action的处理,result的处理,velcity翻译jsp页面)中访问变量都是由valuestack来承担的。
楼主所讨论的便是jsp页面中valuestack的应用。上文提到了,jsp页面是由velcity翻译的,而页面中所有ww标签中的变量都是从valuestack中取得的.所以只要用ww标签,你就别想直接访问内置的request对象,而只能用ognl语法:
<ww:property value="#attr.objectkey"/>
具体怎么做的z_jordon的回复中已经说的很清楚了。

总之,webwork的vs很简单,但由于大家都是从struts中的做法里转过来的,一时可能别不过这个弯,但可以肯定的是,这种方式使webwork变得简单,使框架内部如何工作变得很清晰,自然。
如果你觉得不习惯,可以用ServletActionContext(大名鼎鼎的appfuse就是这么做的),他是ActionContext的一个子类,专门为喜欢javax.servlet包的人准备的,但这使你的action对sevletapi产生依赖,一般不提倡
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics