关于Tapestry的一些问题

转载 2004年07月08日 00:05:00

来源:http://forum.javaeye.com/viewtopic.php?t=6035&sid=42b6f6b88ee6a3cc2e2ccdea70a7fdf9

 

Tapestry也用了一段时间了,对于Tapestry基本上也是了解的很透了,不过也慢慢发现了一些问题,虽然Tapestry号称可重用的Server端控件,号称基于html模版,可是实际上还是有些问题。

首先,基于html模版其实不太有用,事实上一个动态页面写好以后,再用dreamweaver之类的工具打开编辑几乎不可能,所以这点优势可以说是很弱的。

其次,关于开发可重用控件的神话。

虽然控件开发出来以后用到的地方是很好用,可是他有以下缺点,足以打回可重用控件带来的好处

(1)开发控件的代价,开发控件要写.jwc,要写.js,要写.html, 要写.script, 要写java,要写library定义,太复杂了。

(2)理解/使用复杂控件的代码,以Tree为例,构造TreeModel是一件非常麻烦的事情。还要理解TreeSessionState

还有Table, 简单一个Table就要用上TableModel,TableSessionState,太复杂了.

而用jsp的话,做tree的话有TreeTag ,(http://www.jenkov.dk/projects/treetag/treetag.jsp)

做table的话有displaytag,都是一个非常简单非常好用的东西,

in fact i'm wondering taglib或者velocity也能做一些可重用的东西,做出来的东西来取代Tapestry的所谓可重用控件不会更难用。anyway,displaytag/treetag也算重用的)
(3) rewind / ListEditor listener / abstract getter and setter 不直观,难看。

(4)使用的代价,比如PopupLink,又要理解Tapestry对应控件,又要理解对应产生的javascript ,还不如一开始就直接写上javascript来的简单。

而且扩展困难,要扩展popupLink做跟多事情要麻烦死了。

(5) 扩展的代价,以service为例,扩展service 就要完全清楚tapestry底层的东西。以及跟其它系统(其他servlet构成的框架)交互的能力
例子可以参考Tapestry in Action里头的Ad Rotator例子,一个简单的
Ad Rotator就要新作service做很多工作,太可怕了,而传统的做法Ad Rotator是非常容易实现的。

(6)理解engine工作原理的代价

(7)调试的代价,如果涉及url encoding, engine, session ,abstract getter & setter等等,就很难作了

//封装太多,失去控制力了。

再次,page object 的逻辑duplicate 在java object 和 page specification 两个地方,太不直观了。往往研究页面关系要很费劲。

最后,单元测试的问题。Tapestry进行单元测试简直不可能,而用webwork是很容易的一件事。转去研究Webwork咯。
不过附带说的一下是,虽然Tapestry有满多缺点,但是他的Server端对于client 信息的Track技术还是相当不错的,用的一些url encoding, 、命名生成等等都非常棒,与传统做法大不一样,没想到servlet原来可以这样写法,对于我还是非常有启发的,这些知识可以用到其他地方去。

最近在作的一个xmlhttp command framework,就是受tapestry启发作的
(基本逻辑是client用xmlhttp发送命令,对应Servlet采用MVC model2.根据传来的的xmlhttp请求不同发送到不同action,目前dispatch action部分使用xwork)
xmlhttp请求类似于
<call namespace="..." actionName="...>
<param name="...">...</param>
</call>
而Servlet dispatch到对应的action执行。

tapestry3创建自定义组件

两种方法创建自定义标签: 一.通过AbstractComponent父类渲染,此种方法直接在java类中编写页面脚本,然后输出。 1.编写java类com/ailk/ech/ecop/view...
  • lzf4712
  • lzf4712
  • 2015年08月18日 13:19
  • 1070

Tapestry框架使用方法技巧总结

一、弹出窗口页面: div class="hero-table" data-nav-group="#hero-nav-tab" data-search="#hero-search" data...
  • u012598738
  • u012598738
  • 2016年04月28日 17:25
  • 863

Tapestry框架概述

Tapestry带来了真正的Java web应用程序OOP编程,摘自《深入浅出Tapestry》中的一句话。这本书也是我学习Tapestry的参考之一,其他参考资料如《Tapestry in acti...
  • jarwis
  • jarwis
  • 2016年07月14日 16:51
  • 3002

Tapestry5.3使用总结

1.Tapestry框架的加载是通过Filter来完成的,需要在web.xml中加入以下配置: app org.apache.tapestry5.TapestryFilter app ...
  • JavaMan_chen
  • JavaMan_chen
  • 2013年07月17日 10:16
  • 11317

解读Tapestry5.1——页面渲染

本文旨在介绍Tapestry5.1的页面渲染(render)过程,希望最终能给出一个完整清晰的页面渲染流程,以便大家能更好的理解Tapestry页面渲染的过程,构架出更漂亮的Tapestry组件。 ...
  • qq435967718
  • qq435967718
  • 2016年10月26日 13:30
  • 664

Tapestry5 事件处理函数返回结果处理策略

本文主要讨论Tapestry5 (本文针对版本5.1)对事件处理函数所返回的结果进行处理的内部机制。有关事件处理的实现机制可以参见我另一篇博文《Tapestry5 事件分派机制 》。   ...
  • qq435967718
  • qq435967718
  • 2016年10月26日 10:15
  • 396

使用tapestry-prop提高Tapestry运行效率

tapestry-prop介绍     它是一个为Tapestry4.0编写的扩展包,提供了一个新的绑定前缀"prop:"。这个前缀用于获取页面或组件的属性。     看上去和Tapestry内置...
  • qq435967718
  • qq435967718
  • 2016年10月26日 10:07
  • 313

Tapestry的使用

"@Insert" value="ognl:t4start" /> 在上面的代码中,调用了Tapestry的官方组件Insert,value属性是Insert组件的参数之一。 ...
  • libra_ts
  • libra_ts
  • 2018年01月07日 10:45
  • 30

关于IP的一些问题

大家都用IP,但是对于IP的认识,我也是最近才有所了解,发现网络世界很值得研究一下,这是我的一点收获,希望与大家分享。       所谓IP地址就是给每个连接在Internet上的主机分配的一个32...
  • wangdan199112
  • wangdan199112
  • 2013年12月26日 08:09
  • 1454

开始使用Tapestry

去年年底进入一家新的公司,公司使用的技术是自己以前没涉及的,现将官方文档阅读翻译记录到blog,以便将来祭奠自己在公司的职业生涯。...
  • Symbol_Long
  • Symbol_Long
  • 2016年03月04日 23:20
  • 331
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Tapestry的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)