关于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执行。

操作系统的课件 关于操作系统的一些问题

  • 2010年06月18日 14:28
  • 2.38MB
  • 下载

小程序的一些问题

  • u012885438
  • u012885438
  • 2017-07-18 16:47:59
  • 77

关于数据库的一些问题(一)

1、查询性能优化 深入理解MySql如何执行查询点击打开链接2、mysql数据库中find_in_set()和in()用法区别点击打开链接3、配置phpmyadmin连接远程 MySQL数据库点击打开...
  • wc_jkyh
  • wc_jkyh
  • 2018-02-28 14:31:33
  • 39

Tapestry框架使用方法技巧总结

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

Tapestry中的组件及功能

A)Foreach组件:首先,我们接触到的第一Tapestry组件是Foreach组件。Foreach是一个循环组件,它遍历source参数,并在表现其内容前更新value参数。这是Tapestry组...
  • CaidChen
  • CaidChen
  • 2010-03-08 15:20:00
  • 1938

[Java] Scanner(System.in) 从控制台输入

import java.util.*; public class ScannerTest{     public static void main(String[] args){ ...
  • shylx123
  • shylx123
  • 2011-04-16 14:51:00
  • 1089

Tapestry 组件详解

首先tapestry组件最基本的是由三个文件组成:Html,page,java文件. Html页面是前台,java就是后台逻辑,page文件就是将前台与后台联系起来的配置文件。这里的组件大部分只在...
  • CSDN__Java
  • CSDN__Java
  • 2015-10-14 21:17:38
  • 690

guava的坑

Maps.uniqueIndex(values, keyFunction)
  • lynn349x
  • lynn349x
  • 2017-02-21 14:48:15
  • 345

关于设计成本核算的几个问题

目前以月平均价来核算来举例。一、在同一个会计期间里1、先销售后进仓,是负库存的,比如:日期      摘要       数量      单价          成本单价       结存数量09-01...
  • fstao
  • fstao
  • 2009-01-10 11:56:00
  • 2330

Tapestry+spring+hibernate基本架构

  Tapestry+spring+hibernate 1.     配置tapestry1)Web.xml中配置tapestry’s servlet servlet>    servlet-name...
  • moto118118
  • moto118118
  • 2007-03-27 17:45:00
  • 2311
收藏助手
不良信息举报
您举报文章:关于Tapestry的一些问题
举报原因:
原因补充:

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