如鹏网 大学生计算机学习社区

CowNew开源团队

http://www.cownew.com 邮件请联系 about521 at 163.com

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  363 随笔 :: 2 文章 :: 808 评论 :: 0 Trackbacks
   今天我通过为JVM增加“-Dorg.apache.tapestry.disable-caching=true -Dorg.apache.tapestry.enable-reset-service=true”启动参数的方式启用了tapestry的非缓存模式以提高开发时的效率,但是在运行的时候发现以前正常工作的页面出现了错误,跟踪调试以后发现所有的页面成员变量都为null了。经过分析才发现自己以前对tapestry的一个超大误解,也避免了程序投入使用以后造成更大的问题。
因为有一些属性是只有运行期意义的,对用户没有意义,所以我的程序中原有的java的set/get方法没有与页面中的组件绑定,因为我误认为tapestry会替我在请求之间保存这些变量值,我也曾为此怀疑tapestry是否会因此而造成内存占用过大的问题。
   tapestry的页面java文件默认是会被缓存的,当这个页面对象服务完一个请求以后会被放回池中供下一个请求使用。由于一开始的开发的时候我没有启动非缓存模式,这样当我再次对页面进行操作而造成页面刷新后,tapestry把上次为我服务的页面对象又拿给我了,这样在我看来那些页面中的变量好像是被保存了一样。当我打开非缓存模式以后,每次请求完成后,tapestry都会把变量值清空,这样就会造成上面的问题了,这样也就暴露问题了。
   因此在使用tapestry的时候一定要将需要在页面之间保存的变量放到session中或者保存在页面的hidden字段中,否则很容易出现bug。为了提早发现bug,建议在detach方法中将所有的变量赋值为null。
posted on 2007-06-06 23:46 CowNew开源团队 阅读(827) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: