(转载)Tapestry最新版5.1.0.5教程(三)
在讲述页面之间传递值之前首先要介绍一个Tapestry的页面缓存。
Tapestry的一个经常被提及的就是页面的缓存,Wicket也有页面缓存,但是Wicket的页面是缓存在Session里的,缺省好像是只缓存5个页面。这一点让我对Wicket的印象打了折扣,首先,这种机制在高并发,也就是多人同时在线的时候,感觉页面缓存会占用大量资源。而Tapestry的页面缓存是在一个大池中。
页面缓存的优点就是提高效率,但是缺点也是比较明显的,那就是给开发实现带来了不方便。我觉得众人说的Tapestry的学习曲线比较陡,一部分原因就在这里。上一章讲过,在Tapestry中,页面的跳转是通过InjectPage实现的。Tapestry在页面跳转时,会从缓存池中选取一个相应页面的实例,渲染成html。关键在于Tapestry在把页面放到缓存池之前,会把页面实例里的值清空。这就是造成页面传值麻烦的原因。写段代码示例:
class Register { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; }}class Start{ @InjectPage private Register register; Object onSubmit() { register.setName("superman"); return register; }}class Register { @Persist private String name; public void setName(String name) { this.name = name; } public String getName() { return name; }}Class Register { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } void onActivate(String name) { this.name = name; } String onPassivate() { return name; }}