- 浏览: 30201 次
- 性别:
- 来自: 天津
最近访客 更多访客>>
最新评论
-
confident_f:
这个链接打不开了,可有其他途径找到这个材料
Spring Security-2.0入门教程 -
阳光晒晒:
看不到把传送门发出来
风雨过后见彩虹
Tapestry最新版5.1.0.5教程(三) Posted width = "1" height = "1" /> 在讲述页面之间传递值之前首先要介绍一个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;
}
}
如果页面从Start跳转到Register,并且希望把superman这个值传递给Register这个页面,感觉上只要象上面这段代码一样简单设置一下就行了,但是实际上这样是无法在Register的页面上显示出superman这个名字的。因为Tapestry会在页面显示时候的时候,从缓存池中提取一个实例,这个实例在放入缓存池之前,name属性的值就被清空了。
下面是Tapestry页面之间传递值的几种方式:
2、Persist。最简单的方式是使用persist注解。
Class Register {
@Persist
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
只要这样指定后,Tapestry会把name的值保存在Session中,以备下次使用。但是这样的缺点也很明显,首先是占用资源,另外这样的URL是不能作为书签的,因为参数值不体现在URL中,而是保存在Session中。
3、Page Active Context。这个方法比较好,但是需要一些代码来实现。主要是添加两个函数onActivate和onPassivate。
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;
}
}
在Start页面中,我们使用了InjectPage把Register注入到了类中,如果只是简单地返回Register,是不能正确显示name的值的,但是在Tapestry会在把Start页面中的Register放回缓存池,清空Register实例中的变量值之前,检查这个类是否但是现在我们实现了onActivate和onPassivate这两个方法,Tapestry会自动
4、SessionState
在Tapestry中有一种类型的对象存储在Session中,所以对所有页面都是可见的,但是又不需要对页面暴露Session。在Tapestry5以前,称之为ApplicationStateObject,但是这个称呼并不准确,因为这个对象不是Application级别,而只是Session级别,所以Tapestry5开始,改名为SessionStateObject。
使用方法也很简单,只需要在JavaClass中,给相应的属性添加一个@SessionState注解即可。
需要提醒注意的是,SessionState区分对象实例不依赖于实例的名称,而是根据实例的类型,比如:你在一个类中使用@SessionState注解了一个String name;而在另一个类中想再用@SessionState注解一个String password;这是不行的,Tapestry会把这两个当作同一个对象实例。
另一个需要注意的是,SessionState注解之后,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;
}
}
如果页面从Start跳转到Register,并且希望把superman这个值传递给Register这个页面,感觉上只要象上面这段代码一样简单设置一下就行了,但是实际上这样是无法在Register的页面上显示出superman这个名字的。因为Tapestry会在页面显示时候的时候,从缓存池中提取一个实例,这个实例在放入缓存池之前,name属性的值就被清空了。
下面是Tapestry页面之间传递值的几种方式:
2、Persist。最简单的方式是使用persist注解。
Class Register {
@Persist
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
只要这样指定后,Tapestry会把name的值保存在Session中,以备下次使用。但是这样的缺点也很明显,首先是占用资源,另外这样的URL是不能作为书签的,因为参数值不体现在URL中,而是保存在Session中。
3、Page Active Context。这个方法比较好,但是需要一些代码来实现。主要是添加两个函数onActivate和onPassivate。
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;
}
}
在Start页面中,我们使用了InjectPage把Register注入到了类中,如果只是简单地返回Register,是不能正确显示name的值的,但是在Tapestry会在把Start页面中的Register放回缓存池,清空Register实例中的变量值之前,检查这个类是否但是现在我们实现了onActivate和onPassivate这两个方法,Tapestry会自动
4、SessionState
在Tapestry中有一种类型的对象存储在Session中,所以对所有页面都是可见的,但是又不需要对页面暴露Session。在Tapestry5以前,称之为ApplicationStateObject,但是这个称呼并不准确,因为这个对象不是Application级别,而只是Session级别,所以Tapestry5开始,改名为SessionStateObject。
使用方法也很简单,只需要在JavaClass中,给相应的属性添加一个@SessionState注解即可。
需要提醒注意的是,SessionState区分对象实例不依赖于实例的名称,而是根据实例的类型,比如:你在一个类中使用@SessionState注解了一个String name;而在另一个类中想再用@SessionState注解一个String password;这是不行的,Tapestry会把这两个当作同一个对象实例。
另一个需要注意的是,SessionState注解之后,Tapestry会马上会初始化生成一个该对象的实例。
发表评论
-
关于调整部分政府性基金有关政策的通知
2019-07-15 20:42 279摘要: 允许抵免的投资是指试点企业当年实际发生的,独立举办或 ... -
我最近的工作
2009-08-21 11:47 7251:浪潮服务器 曙光服务器 尖锐湿疣等关键字的排名 2:淘宝上 ... -
09游记·夏:天边的云
2009-07-21 17:08 719[img=560,309]http://hiphoto ... -
玩轮滑的人们
2009-07-05 17:08 913轮滑之所以深受大众的 ... -
蜜月滇藏游(8)香格里拉-美的绚烂美的妖娆
2009-06-27 17:08 737中国国家地理对于广义的香格里拉定义是:从西藏东南部林芝地区到滇 ... -
印尼的天空很归属。
2009-06-19 17:08 957在印度尼西亚没有高楼 ... -
Tapestry最新版5.1.0.5教程(二)续
2009-06-14 08:13 853Tapestry最新版5.1.0.5教程(二)续 ... -
spring junit 测试
2009-06-14 08:01 1296spring junit 测试 Poste ... -
TWaver3.0 SVG WebRadar Chart
2009-06-14 07:58 980TWaver3.0 SVG WebRadar Chart ... -
Duke's Choice Award 2009(译)
2009-06-14 07:55 680Duke's Choice Award 2009(译) ... -
环境无关的环境
2009-06-14 07:45 734环境无关的环境 Pos ... -
唯美颐和园:中国传统文化的胜景
2009-06-11 17:08 831标帜建筑昆明湖前的万寿山上的佛香阁十六孔桥石栏水景塔昆明湖佛香 ... -
风雨过后见彩虹
2009-06-10 15:51 756~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... -
RAP的超酷应用系统:CAS PIA
2009-06-09 07:40 869RAP的超酷应用系统:CAS PIA 下面是基于RA ... -
Spring Security-2.0入门教程
2009-06-05 07:22 1314Spring Security-2.0入门教程 欢迎 ... -
(Multi-stage Continuous Integration)多阶段持续集成
2009-06-04 06:44 529BlogJava 首页 新随笔 联系 聚合 ... -
Linux批量替换文件内容
2009-06-02 08:23 2105Linux批量替换文件内容 Posted widt ... -
ubuntu 8.10下手动安装vmvare tools
2009-06-02 08:20 1276ubuntu 8.10下手动安装vmvare tools ... -
webservice 视频教程 Spring+xfire 整合
2009-06-02 08:17 4701webservice 视频教程 Spring+xfire 整合 ... -
Tapestry最新版5.1.0.5教程(二)
2009-06-02 07:44 1036Tapestry最新版5.1.0.5教程 ...
相关推荐
tapestry-bin-5.1.0.5
tapestry5.1.0.5中文实例教程,对于目前国内tapestry学习资源紧缺的情况,可谓填补了中文学习最大的空白,对于想学习tapestry5框架的人来说可谓字字如金,内容详尽,由浅入深,pdf格式
在官方下载的最新的tapestry5的api文档。。。。。。
来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref
包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations
Tapestry5.0.16文档和大家一起学习
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
java tapestry5.1实例教程
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
Tapestry4开发指南.rar Tapestry4开发指南.rar Tapestry4开发指南.rar
Tapestry 不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:...
Tapestry 5.1 实例教程(全部) Tapestry 5.1入门教程,包含基础入门及一些高级组件的使用教程,是学习Tapestry5.1不可多得的教程!
Tapestry 5.1 实例教程 前三章
最近在学习Tapestry,希望对你们有用
Packt.Publishing.Tapestry.5.Building.Web.Applications.Jan.2008.RETAiL.eBOOk-sUppLeX.pdf,虽然是英文的,只有200多页,很快就可以看完,做Tapestry的项目一般没有问题了
Tapestry5开发文档.pdf