阅读更多

12顶
7踩

编程语言

原创新闻 为什么你应该考虑使用Tapestry 5?

2008-08-26 12:41 by 副主编 QQbyte 评论(27) 有17152人浏览
Tapestry 5.0.14近期已经发布,Tapestry社区非常兴奋,因为Tapestry离成为GA只有一步之遥了。如果你没有听说过Tapestry 5,介绍一下Tapestry 5是一个开源基于组件的web框架,对于原先的版本进行了完全的修改。一些开发者不喜欢先前的版本因为困难的学习曲线,一些开发者甚至写文章抱怨,但是T5是一个全新的架构,虽然思路和先前的版本一样。那么T5的好处是什么?为什么你应该考虑在你的项目中使用Tapestry?

1。创建定制的组件非常简单和快捷

考虑一下通过Taglib来创建定制组件?或者更糟糕的用JSF来创建定制组件?通过T5来创建组件简捷而充满乐趣,因为它基于最普通基本的POJO,这意味这你能够单元测试你的定制组件。下面是一个T5组件的一个例子:

public class AddChar {
  @Parameter(required=true)
  private String value;

  @Parameter(required=true)
  private int position;

  @Parameter(required=true)
  private String character;

  void beginRender(MarkupWriter writer){
    StringBuffer sb = new StringBuffer(value);

    sb.insert(position, character);

    writer.write(sb.toString());
  }
}


然后能够在页面模板中调用:
<t:addChar value="literal:HelloWorld" position="5" character="literal:-"/>


或者如果你希望将它嵌入你的HTML tag,你的web设计者能够在他熟悉的HTML设计中预览它,你能这样使用:
<span t:type='addChar' t:value="literal:HelloWorld" position="5" character="literal:-"/> 


是不是非常简单?

2。容易创建模板

如何在T5中创建模板templates?(tapestry社区也称之为布局layout或者边框border,从T4中继承而来)

使用下面的代码创建,非常简洁:

先创建:

@IncludeStylesheet( "context:css/myapp.css" )  
public class Layout {  
  
}  


然后创建template使用和组件类同一名称Layout.tml:

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
    <head>
        <title>Tapestry5 Experiments</title>
    </head>
    <body>
<div id="wrap">
        <t:body/></div>
</body>
</html>


<t:body>元素告诉你插入你的页面片断主体,下面是你的页面片断代码:

<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<div id="right">
      Hello</div>
</t:layout>


下面是page class,你能写入你的逻辑代码:

public class Search {

}


这是被成为Controller中写下你的前台逻辑。所有的内容都很简单,提升你的开发效率。忘记其他第三方开发工具比如Sitemesh吧。

3。更少的需要维护和配置的XML代码

很多配置都在web.xml文件中,但是在T5中,配置写入了java classes文件。下面是例子:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <display-name>Tapestry5 Experiments</display-name>

    <context-param>
<param-name>tapestry.app-package</param-name>
<param-value>yourpackage</param-value>
    </context-param>
    <context-param>
<param-name>tapestry.production-mode</param-name>
<param-value>false</param-value>
    </context-param>

    <filter>
        <filter-name>app</filter-name>
        <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>app</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>


在T5中web.xml是你唯一需要管理的文件。其他配置都放在java class中。用于配置的java class文件名称为:AppModule.java,在web.xml中配置,类似这样:

public class AppModule
{
    public static void bind(ServiceBinder binder)
    {
        // binder.bind(MyServiceInterface.class, MyServiceImpl.class);

        // Make bind() calls on the binder object to define most IoC services.
        // Use service builder methods (example below) when the implementation
        // is provided inline, or requires more initialization than simply
        // invoking the constructor.
    }

    public static void contributeApplicationDefaults(
            MappedConfiguration<String, String> configuration)
    {
        configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en");
        configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
    }
}


这种方式让配置简单,也让发现问题更加简单。

T5其他特点还包括:

4。约定大于配置(这种思想现在很流行,T5也使用了)

5。和Groovy无缝集成

6。提供非常友好的URL

7。支持AJAX


8。和Hibernate无缝集成


9。和Spring框架无缝集成



推荐阅读整篇文章:http://joshuajava.wordpress.com/2008/08/21/why-you-should-consider-tapestry-5/

12
7
评论 共 27 条 请登录后发表评论
27 楼 hhc39 2008-09-10 20:47
千万千万别用,抛弃了jsp不说,自己定了套tag,各种service穿插后台,不改它的源码根本无法在项目中使用,后悔死了,如果上天再给我一次机会,我要说,老子今后绝对不再用tapestry
26 楼 gongmingwind 2008-09-05 10:17
没研究过,适合不适合自己做个简单的增删改查实验下就知道了
25 楼 gongmingwind 2008-09-05 10:15
没在项目中用过,但公司有个项目是用他做的,现在正在维护,改起来很痛苦.相关资料很少.
24 楼 powerfj 2008-09-01 15:24
感觉一般般
23 楼 jasongreen 2008-08-27 19:44
BS 之,T5刚出来我使用了,被迫中途更换框架。

走错了,java的web为什么都要想着封装一切,而不是开放一切呢?

太极端了。

我们需要的只是一个清晰的架构。
22 楼 rockjava 2008-08-27 17:01
以前没用过Tapestry,今天我试了一下,感觉没说的那么好啊,感觉能比现在的JSF好些。
21 楼 just4you 2008-08-27 16:40
天啊,各说各的好,整不过来了
20 楼 foxgst 2008-08-27 14:58
对于快速开发和维护来说,我觉得是好事。
ROR的思想有什么不好?Grails不也是如此吗?如果实用是第一原则,易用要排第二。

不过T5的开发和维护团队的确让人担忧,等T5的GA都大半年了...
T5的组件也少了点。
19 楼 welllove53 2008-08-27 14:34
确实不错,其实我已经在项目中看到成功的用例了,确实国内太慢了
18 楼 Ghostbb 2008-08-27 14:29
T4更成熟一些!T5最大的弱点是没有T4那么丰富的组件。T5仍然是趋势!
17 楼 tv9 2008-08-27 13:17
千万不要用在真正的项目上,用来研究一下还可以。
16 楼 srdrm 2008-08-27 12:45
web 框架在flex 面前显得没什么力度. 除非使用flex, 要不我仍然选择结构化的页面布局tiles + JSTL 的方式,已经能最大程度简化我们的WEB 研发
15 楼 pickerel 2008-08-27 12:45
是不是还要做任何修改之后都要重启服务啊?太痛苦了。
14 楼 kenshinlk 2008-08-27 09:19
没什么值得惊喜的东西,没有想使用的冲动。跟我现在的struts2+spring2+freemarker+extjs的开发模式比起来,快不了哪里去,不喜欢用taglib。
13 楼 neora 2008-08-27 09:18
在T5中web.xml是你唯一需要管理的文件。


这很吸引人。
12 楼 rwx7699 2008-08-27 09:06
T5相对T3,是全新的框架,需要一段时间熟悉,但是我觉得T5的思想非常了不起,也许在不久的将来,会成为最流行的前台架构。
11 楼 76052186 2008-08-27 09:01
我正用,有兴趣的看看。我觉得是我见过的java中最好的web层框架,至少目前来说
10 楼 zhkchi 2008-08-27 08:29
还不够麻烦?至少我是觉得非常麻烦了...看到就害怕
9 楼 koda 2008-08-26 20:00
为什么不推荐Tapestry5?

因为它的发展蜗牛般缓慢,
因为它一直在咀嚼ROR的残羹冷渍,
因为它永远掌握在那个专断的作者手里,GA的曙光你永远都看不到。

信不信由你,呵呵
8 楼 comeon 2008-08-26 19:40
tapestry从3开始用的,新的功能也是一步步期待而来的。相信Tapestry会越来越受用。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 窗口枚举遍历的例子-win7 -VC2010-debug 调试成功

    初学者,请多多指教 窗口枚举遍历的例子-win7 -VS2010-debug 调试成功 找到的窗口 的句柄、窗口标题和类名 用树形控件显示。 [img=http://img.bbs.csdn.net/upload/201510/23/1445586090_885745.jpg][/img]

  • VC枚举系统所有窗口

    VC++的代码,枚举系统当前的所有的窗口

  • 在 CTreeCtrl 中枚举系统中的所有窗口!(I)

    本文将给出一个源程序 在一个对话框中的TreeCtrl中用树的形式枚举窗口  这是头文件  // WinList.h : header file //  ///////////////////////////////////////////////////////////////////////////// // CWinList dialog  class CWinList : public C

  • 在 CTreeCtrl 中枚举系统中的所有窗口!(II)

    发信人: cvisual (贝贝), 信区: VisualC 标  题: 在 CTreeCtrl 中枚举系统中的所有窗口!(II) 发信站: BBS 水木清华站 (Tue May 19 14:37:24 1998)  这是实现文件  // WinList.cpp : implementation file //  #include "stdafx.h" #include "mfc.h" #incl

  • c++ 枚举指定进程子窗口以Acrobat Reader DC (AcroRd32.exe)为例

    /* 说明:枚举指定窗口 且可见子窗体 句柄 文件:FindWindows.h 作者:@jd 枚举指定进程子窗口类 此类以Acrobat Reader DC (AcroRd32.exe)为例 */ #pragma once class CFindWindows { public: CFindWindows(void); ~CFindWindows(void); /* ...

  • java tapestry_Java Web开发的轻便架构Tapestry5---简介

    经过近10年的发展,在Tapestry开发团队不断探索和不懈努力中,Tapestry经历了从版本3到4又到5的几次大的突变,当前的Tapestry5架构正趋于成熟,逐步获得Web开发者的认可。Tapestry 5是基于组件的,适用于建立动态的...

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

     它是一个为Tapestry4.0编写的扩展包,提供了一个新的绑定前缀"prop:"。这个前缀用于获取页面或组件的属性。  看上去和Tapestry内置的"ognl:"前缀没有什么区别,但是低层实际获取数据的方法和OGNL是完全不同的。...

  • java tapestry_java Tapestry4.1.2入门说明教程

    Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性!安装jar包1、将Tapestry解压目录下的lib目录中的jar包拷贝到WEB-INF...

  • Tapestry 5简介

    本文是在Tapestry官方文档的基础上翻译整理过来的,有时间再翻译其他主要章节,希望有兴趣的可以多多交流!水平有限,还望高手多多指正! 概要 Tapestry是一个开源的框架,用以创建动态的、健壮的、高可扩展...

  • 枚举当前所有窗口

    为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

  • 枚举所有Windows所有窗口句柄并在Ctreelist控件显示

    敢问题解决的时候相当棘手   记录以备后用 解决思路  EnumWindows  EnumWindowsProc EnumChildWindows EnumChildProc在EnumWindowsProc 获得一个父(祖先)窗口后加入链表HwndList (元素由窗口句柄及其在Ctreelist中的位置组成) EnumChildProc 中查到一个窗口

  • Tapestry原则

    静态结构就是:当你使用Tapestry构建一个页面时,你可以定义所有的组件来供该页面使用。在渲染或事件触发该页时,你可以动态改变页面组件的内容。 这看起来限制很多....其它的框架允许在流布局中创建新的元素; ...

  • tapestry mysql_tapestry与mybatis模块的结合

    要接入mybatis需要考虑以下几个方法的问题:此项目是否还会引用hibernate(hibernate用的实在太广了没法忽视)?与hibernate的事务如何共存?与hibernate的配置如何统一(谁也不想一个项目配置多个数据库地址吧)?...

  • Wicket 1.5和Tapestry 5比较

    Wicket 1.5和Tapestry 5都使用maven作为build tool,这个它们没有区别。  2.Configuration 配置  Wicket 1.5和Tapestry 5都是采用xml,必须要配置的文件是web.xml。其他的,还需要配置xml设置...

  • Tapestry 5 原则

    原则1:静态结构,动态行为 “动态行为”的概念对于构建web应用时很明显,不同的用户或情况应该展现不同的...但是对于Tapestry,“静态结构”意味着什么?静态结构就是用Tapestry构建一个页面,这个页面包含你定义...

  • Tapestry 5 输入验证

    本文根据http://tapestry.apache.org/tapestry5/tapestry-core/guide/validation.html翻译整理过来,请高手指正,转载请注明出处!   表单输入与验证   表单输入是任何应用的生命之血;这是一种从用户收集有用信息...

Global site tag (gtag.js) - Google Analytics