组件框架技术tapestry及简单对比

JSF和Tapestry都是基于页面组件技术的开发框架,但jsf基于jsp,仍然是jsp架构,开发维护起来非常麻烦。tapestry则不同,是基于servlet的一种完全页面组件化的开发框架,
而且现在已经非常成熟,目前已经推出t4.0-beta2。
页面开发走向组建化是一种越来越明显的趋势,这方面tapestry可以说是引导了这个方向,也许是sun太厉害,jsf一出生就得到大家的关注,
不过顺此东风,tapestry的用户社区比以前更加繁荣了:http://news.gmane.org/gmane.comp.java.tapestry.user
tapestry有很多范例精彩,参看它的官方网站:http://jakarta.apache.org/tapestry/
若想致力于web页面的开发,个人觉得jsp/serlvet是首要精通的,至于选择框架,则是一件费精力的事情。框架的目的是为了简化开发流程,
提高生产效率,典型的框架如turbine、struts、webwork、jsf、tapestry等。如何选择框架是一个经久不衰的讨论,没有多年的实践经验是难
以作出实际评价和最终抉择的。愚以为turbine过于厚重,无论是开发速度还是运行速度都令人难以接受,2.4M1到现在快一年还是M!,运行起
来真是满如蜗牛,打开一个页面要等浏览器的地球要转上半圈,这也许要归功于velocity解析和没有页面缓存的功劳了。还有就是扩展性、可
维护性等,实际上都很差,象它的核心类Turbine,居然定义为final!实际开发起来还不如我自己实现的velocity+servlet+filter框架效率高
,速度快。struts,webwork实际都是jsp的MVC包装,无法摆脱jsp页面难以维护的烦恼,也许开发起来快,但维护呢?还有就是美工人员,他
们都得懂jsp。实际的mvc分工在页面这块还是打了折扣。jsf,在一定程度上借鉴了tapestry的组件思想,但大项目应用中狂多的标签封装和定
义把你搞疯也得把机器搞疯,估算有两大弊端:运行速度相对慢和页面维护相对复杂。最后是tapestry,唯一的难度是理解它的组件开发方法
,理解的转变就好比从过程开发到OO开发一样,但对初学者无所谓,一张白纸总是容易上画的。
选择tapestry有如下几大优点:
1、最彻底的MVC开发框架,页面代码全部由HTML标准标签组成,页面美工人员无须了解特别的标签定义。
2、可重用组件开发节省开发资源,一句话:越开发越轻松
3、优秀的页面流转开发。传统方式都是基于URL实现激活页面流转,而tapstry除了此方式,你还可象开发普通java类一样实现page页面流,更
重要的是,还可由此实现页面类的复用。
4、丰富的组件资源。除了官方维护的资源外,还可找到一大堆的tapestry组件库。
5、超强的扩展性。tapestry是一个真正的开放性架构,说白了,你觉得哪个服务不爽,你就可写个替代它。
6、生命力超强,不断的自我更新、发展。tapestry4.0与3.0相比简直就是另一个飞跃,如支持jdk1.5的Annotations,仅这点开源产品中目前
还只看到一个hibernate;支持portlet JSR-168,又一个顺应潮流的web开发支持。规划中的4.1将支持页面静态化,这不正是众多开发人员的
另个期待吗?
7、tapestry的开发人员稳定。不是一个两个人在那里单打独斗,而是有一群人在开发和支持tapestry的进程。
8、tapestry技术成熟吗?基于tapestry的软件和大网站已经很多了,
国外的:软件如SeaView内容管理系统、WidenTM Digital Asset Management System
网站大的如:http://www.nhl.com/,http://www.theserverside.com/,https://merchant.shopping.com/enroll/app,http://www.identitytheft911.com/home.htm,http://admissions.chicagogsb.edu/admissions/app
国内的:软件如http://www.onetsoft.com,网站如:http://love.9618.com.cn/dating/app,http://dbi.lib.ntu.edu.tw/libraryList/,http://www.cdcin.com/,http://www.xtcin.com/,http://www.xnjs.com/

tapestry的优点和带给你的便利不是两句话可讲清楚的,还需要自己去多多体会。

Tapestry 3.0我用过,概念很新,没有JSF那种绕圈子的感觉。

问题是:太琐碎,配置文件一个页面一个,吓人啊,不知4.0有无改进,这个东西就象struts 1.2以前版本一个页面一个action一样,struts1.2提供了DispatchAction,稍微解决了这个问题。

个人感觉Tapestry结合工作流软件开发比较好,因为Tapestry页面流转不是基于URL,struts是基于URL的,所以可以使用工作流框架的配置流转来控制Tapestry页面。

以上只是个人认识。

在jdk1.5的Annotations后,tapestry可以甩掉.page文件了

看了以上讨论,简单差了一下资料,发现用它做项目的还真不少,国内有人做的一个自动化的软件构建和管理工具-luntbuild好像就是用tapestry作的。这里提出几点疑问,希望得到明示:
1、tapestry是否可以与tiles、sitemesh等一起使用,还是有其他的方式控制页面布局?
2、有无IDE工具的支持?
3、他是不是有点类似.net的webform,.net的webform也是一个页面一个配置文件。
4、他的控件是否够多,因为页面对样式的要求比较高,不同项目的叶面风格都不同,就拿它的日历控件来说,能否自定义样式,比如说改换颜色、背景等。或者能够通过简单的继承来对其进行个性化?

刚刚试用了一下onetsoft.com的最新软件(免费的),发现它的客户端页面也才20多个页面,可见tapestry在组织页面方面的能力是多么强。
你的问题都没有问题,tapestry社区有很多讨论。

我前阵子也看了一整天的tapestry,看了它的一些那些demo.感觉确实是基于组件的页面开发。但就是配置太烦琐了。不知道有什么改进的方法。还有现在那些公司好象都在捧jsf。。。有时间我也多多研究一下tapestry.

刚开始没有技巧,配置麻烦。
甩开.page配置后你会发现很简单。
有时间去研究一下免费的onet forums的模板文件,应该可以受到启发。
它们的站:www.onetsoft.com

我试验的用过tapestry,感觉这个东西还可以,因为它的原理是用html中加入标志性标签,标识那一部分应为tapestry来解析,然后由tapestry动态的ONGL翻译,然后转换到组件,最后使用servlet解析,变量print输出。
但我认为不要的地方在于:
1。页面调试不方便。每一次html的改变都要做起servlet服务器。
2。文档少,例子少。

我现在正要用jsf开发,感觉这人东西,在jsp基础上还可以,上手要比tapestry快,而且文档比较多。而它还使用的简单的ioc和Decorator模式,组件可维护。感觉要比tapestry好一些。

以上只是我的个人观点。

刚去了一趟onesoft.com,试用了一下其表现层源代码(据说基于tapestry4.0最新版),总体感觉tapestry用起来还是挺方便的,以后就把它当成我的实战范例咯。

我研究过一段Tapestry 3.0。它的组件化开发确实思想很不错,不过也有很多的问题。比如,一些组件的属性过于简单。在事件绑定方面不是很完善。如果能够做到和asp.net里所实现的webform和事件驱动,那就非常完美了

JSF要更精致一些,与webform一样完美。

Tapestry的中文资料很少,网上看到一个还不错,推荐给大家:http://forum.cdmcs.com/update/Tapestry%BF%AA%B7%A2%D6%B8%C4%CF0.9.rar

不错,多谢。这比那个in action的更适合初学者(in action只能当reference对于我这种没有多少时间进行研发的人)。

Tapestry文档不是没有,很多,但是都罗罗嗦嗦好像说不清楚,认为主要是名词定义问题,Tapestry用component来表达它的一个发明概念,但是component这个普通名词意义我们一般人都有先入概念,但是用这个先入概念理解Tapestry的component就有问题,他们应该学习Spring一帮人,多玄!什么东西都发明一个新名词来指代,其实甚至只还是那些东西,但是至少让人认为是新东西,一开始就兴奋,一付好好学习的态度,不让以前的概念打扰自己,这样就容易接受。

就象Struts由Action/ActionForm/Jsp组成一样,JSF由JSP/Managed-bean组成一样,Tapestry主要由页面(Page)和组件(Component)两个部分。
你可能以为我说这话等于白说,因为Page和Component是两个太普遍的概念了,但是我说Tapestry主要由特殊页面(PageA)和特殊组件(ComponentB)两个部分组成,你可能觉得注意到不同点。

其实这两个东西都涉及Java类,我们普通也成为Component,这下就容易把这里Component和ComponentB混淆在一起,前者是单个类,后者是一组东东,其中也设计到单个Java类。

我觉得学习Tapestry入门很重要,也就是思维方式转过来就开朗了。