`
tapestry
  • 浏览: 186985 次
社区版块
存档分类
最新评论

Tapestry5新特性

阅读更多
官话版:
一、组件类不再需要继承基类;
二、组件类不再是抽象类,而是纯粹的简单的POJO(plain old Java objects)
三、不再使用XML配置文件和组件定义文件(.page,.jwc),所有的配置信息使用注释(annotations)实现。
四、组件类和模版的任何改变都可以马上反应出来,不需要任何重启。
五、Blazing(翻译:炽燃的, 强烈的)速度,比Tapestry4的速度更快。

白话版:
一、组件类可以不受框架限制,不需要继承基类,也不需要定义成抽象的,生命周期完全使用注释来实现。
package org.example.myapp.components;

import org.apache.tapestry.MarkupWriter;
import org.apache.tapestry.annotations.ComponentClass;
import org.apache.tapestry.annotations.BeginRender;

@ComponentClass
public class HelloWorld
{
    @BeginRender
    void renderMessage(MarkupWriter writer)
    {
        writer.write("Bonjour from HelloWorld component.");
    }
}


@ComponentClass相当于标记extends BasePage
@BeginRender相当于implements PageBeginRenderListener
二、配置也完全用注释实现了,包括IOC容器,也就是基于注释配置的IOC容器,放弃了hivemind。
module和service定义类:
package org.example.myapp.services;

import org.apache.tapestry.ioc.annotations.Id;

@Id("myapp")
public class MyAppModule
{
  public static Indexer buildIndexer()
  {
    return new IndexerImpl();
  }
}

需要注入的类:
@Inject("service:myapp.Indexer")
private Indexer  indexer;


也就是buildIndexer方法为固定写法,格式为build{serviceId}。当然还有hivemind的影子,比如多module和contribute等等。
三、页面和组件的配置文件都可以完全使用注释来实现,这个特性在Tapestry4中已经可以使用了,没什么新奇的,不过完全在注释中配置,看着代码有点乱,写多了就开始怀疑这还是java类么。
例子:
package org.example.app.pages;

import org.apache.tapestry.annotations.Component;
import org.apache.tapestry.annotations.ComponentClass;
import org.example.app.components.Count;

@ComponentClass
public class Countdown
{
    @Component(parameters =
    { "start=5", "end=1", "value=countValue" })
    private Count _count;  
  
    private int _countValue;

    public int getCountValue()
    {
        return _countValue;
    }

    public void setCountValue(int countValue)
    {
        _countValue = countValue;
    }
} 

四、Tapestry 5自动重新加载改变过的类和摸板,这个应该是脚本语言的特性,但从说明中好像只有组件类有此特性,其他的类可能还是需要重启。不过这已经是很大的进步了,用java实现了脚本语言的动态载入功能。现在随着越来越多的对classloader的研究,对java的使用也越来越深入了。
五、关于性能,没有了解析配置文件的花销,估计Tapestry4中的初始化慢的问题应该可以解决了。如果说比纯servlet和jsp快的话,那就要归功于cache的使用了。

总起来说Tapestry5还是值得期待的,现在还处于开发阶段,许多特性都是没有定型的,如果有更好的概念,估计HLS会加进去了(PS:真是服了他了,Tapestry4.1加入了Ajax的功能,正要研究呢,却又推出了这个T5,搞的我心痒痒的,不过好久没有这种看到新特性的兴奋了)。其中提出了许多的新概念还是很值得借鉴的,包括基于注释的IOC容器,现在spring也推出spring-annotation包了;基于注释的页面显示生命周期定义,@SetupRender、 @BeginRender、 @BeforeRenderBody等,这样整个类除了注释外,没有任何侵入性了,把注释去掉就是个简单的java类,不需要继承,不需要实现固定方法。而且Tapestry5的生命周期基于状态机和队列算法,而不是尾递归,这样周期可以定义的很细,而且实现起来也简单了。
分享到:
评论
28 楼 koda 2007-09-03  
等得花儿都谢了
眼泪哗哗流,嘴里哇哇吐
27 楼 mayu 2007-09-03  
想哭了,都9月份了。。。
26 楼 chinapr 2007-09-03  
dengyin2000 写道
ahuaxuan 写道
T5正式版大概什么时候发布呢,jwcid确实已经是一个tapestry的标志,现在居然没有了,连wicket都学习了tapestry这个功能(wicket:id),可是t5却自己把它给废了,真是不知道这个替代品是进步还是退步了


我对tapestry5没有太多的期待。 虽然我是一直从T3-T4。 前段时间看了T5。 感觉还非常不成熟。 更看好wicket。 拥有丰富的组件。
三、页面和组件的配置文件都可以完全使用注释来实现,这个特性在Tapestry4中已经可以使用了,没什么新奇的,不过完全在注释中配置,看着代码有点乱,写多了就开始怀疑这还是java类么。


java类中的jsp 搞得乱七八糟的!
25 楼 jfan 2007-06-26  
关注t5
24 楼 paruny 2007-06-25  
刚接触tapestry5,那个有完整的例子和说明啊,给我发个,谢谢了啊!我的邮箱是paruny@gmail.com  qq也可以:275694861
23 楼 dengyin2000 2007-06-08  
ahuaxuan 写道
T5正式版大概什么时候发布呢,jwcid确实已经是一个tapestry的标志,现在居然没有了,连wicket都学习了tapestry这个功能(wicket:id),可是t5却自己把它给废了,真是不知道这个替代品是进步还是退步了


我对tapestry5没有太多的期待。 虽然我是一直从T3-T4。 前段时间看了T5。 感觉还非常不成熟。 更看好wicket。 拥有丰富的组件。
22 楼 lihong1840 2007-06-08  
@ComponentClass用不了 难道要自己写么?
21 楼 tapestry 2007-01-07  
没有废掉呀,代替为t:id
20 楼 ahuaxuan 2007-01-07  
T5正式版大概什么时候发布呢,jwcid确实已经是一个tapestry的标志,现在居然没有了,连wicket都学习了tapestry这个功能(wicket:id),可是t5却自己把它给废了,真是不知道这个替代品是进步还是退步了
19 楼 tapestry 2006-12-04  
T5正在开发中,很多东西都没定型,jwcid已经被替换,而不是去掉了,目前的格式为:
<span t:type="If" t:test="prop:showWarning" class="warning">
  . . .
</span>
18 楼 sdyjmc 2006-12-04  
jwcid 去掉之后html Temlate中怎样做到降低和美工人员的交互啊?这个不喜欢。
17 楼 stone 2006-11-23  
引用
三、不再使用XML配置文件和组件定义文件(.page,.jwc),所有的配置信息使用注释(annotations)实现。

震撼!这就是我想要的!
16 楼 biaoming 2006-11-18  
还真的是~~
原因是我的project配置有错,删除整个项目然后再新一份就好了。
15 楼 biaoming 2006-11-18  
随T5更新好几天了,还是一样的错误。
Can't find bundle for base name org.apache.tapestry.internal.ioc.IOCStrings, locale zh_CN

不过我今天再次看了T的源码目录结构,发现src/main/resources有个org目录,放有一些资源文件,是不是和这个有关呢,但不知道为什么与源码打包后包里的资源文件目录都是src.main.resources,而不是org.tapestry.这样的结构,是不是这个原因呢?
14 楼 tw801 2006-11-16  
还是等支持tapestry的netbeans插件完善了再说吧!决定先用JSF1
13 楼 biaoming 2006-11-14  
太好了,马上下载测试。

但现在错误还是原来的错误,
Caused by: java.util.MissingResourceException: Can't find bundle for base name org.apache.tapestry.internal.ioc.IOCStrings, locale zh_CN
12 楼 tapestry 2006-11-14  
具体依赖参考:http://tapestry.apache.org/tapestry5/dependencies.html

附件为所有依赖包,包括运行和测试的。
11 楼 biaoming 2006-11-13  
我的现在缺两个包,怎么找也找不到。
org.openqa
com.thoughtworks.selenium

这两包谁有,共享一下。
或者biaoming@126.com
10 楼 tapestry 2006-11-11  
Can't find bundle for base name org.apache.tapestry.internal.ioc.IOCStrings, locale zh_CN

这个问题我也碰到过,刚刚重取了代码(11月11号23点),打包后重新测试,好像已经不存在这个问题了,你可以重新取下代码试一下。
9 楼 biaoming 2006-11-11  
楼主,相信你已经体会到T5带来的魅力了。
我也SVN了源码,也感觉感觉一下,不过一直没有启动成功。
提示如下:能提供你的源码来参考下吗?

2006-11-12 11:10:27 StandardContext[]Exception starting filter app
java.lang.ExceptionInInitializerError
at org.apache.tapestry.internal.ioc.DefaultModuleDefImpl.addServiceDef(DefaultModuleDefImpl.java:336)
at org.apache.tapestry.internal.ioc.DefaultModuleDefImpl.grind(DefaultModuleDefImpl.java:183)
at org.apache.tapestry.internal.ioc.DefaultModuleDefImpl.<init>(DefaultModuleDefImpl.java:106)
at org.apache.tapestry.ioc.RegistryBuilder.add(RegistryBuilder.java:96)
at org.apache.tapestry.TapestryFilter.init(TapestryFilter.java:96)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:225)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:308)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:79)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3698)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4349)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
Caused by: java.util.MissingResourceException: Can't find bundle for base name org.apache.tapestry.internal.ioc.IOCStrings, locale zh_CN
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:805)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:699)
at org.apache.tapestry.internal.MessagesImpl.forClass(MessagesImpl.java:55)
at org.apache.tapestry.internal.ioc.IOCMessages.<clinit>(IOCMessages.java:34)
... 23 more

相关推荐

    Tapestry5最新中文教程

    Drobiazko和R. Zubairov合作撰写了一篇文章,详细介绍Apache Tapestry 版本5——一个...文章向读者展示了创建组件方法,并谈到了Tapestry中的IoC以及Ajax的相关特性 译者 沙晓兰 发布于 2008年7月2日 下午9时30分

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    引用Tapestry网站上的一句话:"Tapestry用对象(objects),方法(methods),属性(PRoperties)替代以往的URLs和查询参数, 重新诠释Web应用开发.Tapestry 3.0即将发布,它有大量的改进和新的特性.你值得拥有!!!!

    Tapestry开源框架的详细讲解doc文档(经典)

    引用Tapestry网站上的一句话:"Tapestry用对象(objects),方法(methods),属性(properties)替代以往的URLs和查询参数, 重新诠释Web应用开发.Tapestry 3.0即将发布,它有大量的改进和新的特性

    EasyJWeb1.0新特性抢先看

    EasyJWeb 是基于java 技术,用于企业级Java Web 应用程序快速开发的MVC 框架。...架,如Rails、Struts、JSF、Tapestry 等,吸取其优点及精华,是一个完全由来自的中国开源 爱好者开发,文档及注释全部为中文的开源框架

    2024 最新 毕业设计 高校学生选课系统项目源码.rar

    3. **模块和特性**:Spring框架由多个模块组成,包括核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。这些模块为构建企业级应用提供了丰富的功能和灵活性。 4. **应用范围**:Spring框架...

    JavaServer Faces 2.0, The Complete Reference

    从Tapestry吸收来的模版方式不仅可以让开发工程师像搭积木一样组合一个页面,更可以搭好架子后只在相关页面中只修改需要改变的部分。Facelets还有一大好处,就是将所有java代码从页面标签中移出,让分工更明细了,...

    Spring 2.0 开发参考手册

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...

    spring chm文档

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    Spring中文帮助文档

    3.5. 定制bean特性 3.5.1. 生命周期回调 3.5.2. 了解自己 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用...

    Spring Framework 5.3.6

    值得注意的是,Spring中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts,WebWork,或 Tapestry。 • 提供诸如事务管理等服务的面向方面编程框架。 在设计应用程序Model时,MVC模式(例如Struts)...

    webx3框架指南PDF教程附学习Demo

    • Tapestry • Spring MVC 以上框架都是非常优秀的。说实话,如果阿里巴巴网站在2001年开始,就有这么多可选择的话,无论选择哪一个都不会有问题。因为这些年来,所有的开源Web框架都在互相学习、并趋于相似。...

Global site tag (gtag.js) - Google Analytics