因为有一些属性是只有运行期意义的,对用户没有意义,所以我的程序中原有的java的set/get方法没有与页面中的组件绑定,因为我误认为tapestry会替我在请求之间保存这些变量值,我也曾为此怀疑tapestry是否会因此而造成内存占用过大的问题。
tapestry的页面java文件默认是会被缓存的,当这个页面对象服务完一个请求以后会被放回池中供下一个请求使用。由于一开始的开发的时候我没有启动非缓存模式,这样当我再次对页面进行操作而造成页面刷新后,tapestry把上次为我服务的页面对象又拿给我了,这样在我看来那些页面中的变量好像是被保存了一样。当我打开非缓存模式以后,每次请求完成后,tapestry都会把变量值清空,这样就会造成上面的问题了,这样也就暴露问题了。
因此在使用tapestry的时候一定要将需要在页面之间保存的变量放到session中或者保存在页面的hidden字段中,否则很容易出现bug。为了提早发现bug,建议在detach方法中将所有的变量赋值为null。