读书人

Tapestry引见

发布时间: 2012-07-04 19:33:55 作者: rapoo

Tapestry介绍

页面与组件
??? Tapestry将应用程序分为一系列页面,每个页面都有一系列组件组成。组件自身又可由一系列其它组件组成,而且对组件的没有递归深度的限制。
??? Tapestry的页面本身也是一种组件,只不过多了一些特殊的工作。
??? 所有组件都能被其它组件包含。页面和大多数用户定义的组件都有一个模板。模板是一个特定的HTML文件,定义了组件的静态和动态部分,通过标记还可以确定嵌套的组件是否活跃。但是,组件并不必须拥有模板,大多数Tapestry提供的组件通过代码生成他们的HTML标签而不是使用模板。
??? 组件可以拥有一个或多个拥有确定名称的参数。这些参数可以是被包含它的页面或组件使用(或者更确切的讲是绑定)。和Java函数的参数不同的是,组件的参数可以是双向的。一个组件可以在获取数据时读取某个参数,在更新数据时更新参数。
??? 大多数组件只关心如何创建HTML标签。一部分的组件会处理与请求相关的事情;处理传入的请求。比如PageLink、DirectLink和ActionLink等Link类,在显示页面时会在页面创建一个链接标签,在用户点击链接时会处理部分与分派用户请求到指定用户代码的工作。
??? 其它组件,如Form和由Form控制的组件(TextField,PropertySelection,Checkbox等),使HTML的表单使用变得简单。在这些组件显示的时候,他们会读取应用的领域对象的属性来构造默认数据。当表单提交的时候,表单中的组件会读取HTTP的请求参数,并将这些数据转化为合适的类型并更新到领域对象。
引擎,服务和友元
??? 随着时间的推移,Tapestry有了属于它的术语。
??? 引擎是核心对象,在Tapestry程序里它充当的角色就像HttpSession在Servlet API里做的一样。引擎最终会保存到HttpSession里。因此,保存应用程序中需要持久化的状态(需要在不同请求中保存的数据)最终会由引擎负责。本文将主要讨论默认的实现,并会提示一些在扩展或重写引擎时需要注意的事项。
??? 引擎服务是连接servlets,URLs和其他框架逻辑的桥梁。引擎服务负责编码和解码URLs,为框架提供在链接被触发时(当用户点击链接或提交表单)能够唯一确认对应操作的参数。同时,服务也负责分派这些请求。用一个对象封装对URL的编码和解码功能是Tapestry的一个关键技术。这样组件能在不知道它们是如何被使用,包含在哪一个页面的情况下进行复杂的工作(在构造URLs的时候服务将会处理页面的具体位置)。
??? Visit对象是一个在应用程序中定义的对象,扮演者服务器端状态保存者的关键工作(并不是仅被某一个页面处理的数据)。不同的应用程序可以根据需要定义自己的Visit类。Visit对象会作为引擎的一个属性保存,所以最终会持久化的保存在httpSession中。
??? Global对象也是一个与应用程序相关的对象。它保存的是一个用于应用全局的数据,而不是对应于某一个特定用户或会话的数据。一个常用的例子是为使用JDNI查找session EJBs的方法提供一个统一的逻辑。
对象图导航语言(Object Graph Navigation Language)
??? Tapestry和对象图导航语言(OGNL)是紧密联系的。OGNL是一个Java的表达式语言,它能深入一个对象读取或更新他们的数据。OGNL类似与包含在JSP2.0中的表达式语言,但是它具有更强的功能。OGNL不仅支持获取属性,它还能处理数学表达式和方法调用等,访问public class的静态属性,动态创建包括链表和map在类的对象。
??? 最简单的OGNL表达式只包含属性的名称,比如foo对应于使用getFoo()方法(或者对应于表达式用于更新属性时的setFoo()方法)。导航的功能体现在当表达式是一串属性名时,比如foo.bar.baz对应于使用getFoo().getBar().gatBaz()。值得注意的是处于表达式中间的属性(这个例子中的foo和bar)不能为空的。
??? OGNL主要是用于让不同的对象(比如一个页面和同一个页面中的一个组件)共享数据。
Tapestry的过去和未来
??? 虽然早在2000年就开始做宣传,但是Tapestry还是在社区反馈的推动下不断的进行着改进。在2003年Tapestry获得了很大的成功。在这段时间里Tapestry项目从SourceForge迁移到Jakarta。同时从2.3版升级到了3.0版(3.0版最终是在2004年4月发布)。
??? Tapestry 3.0的设计在根本上改变了Tapestry应用的创建方式。它提供了一种RAD(快速应用开发)方法。用一种JSP和PHP开发人员熟悉的方式在HTML模板中定义组件的类型和参数。
??? Tapestry 3.0 还提供了错误行精确定位的支持。当程序在运行时发生错误,HTML模板或定义文件中的相关错误行将会显示出来。更重要的是,3.0版提供了<property>属性并使用字节码生成技术在后台支持。
??? Tapestry 4.0 比3.0作了更大的修改。使用了建立在HiveMind基础上的一个新的,更成熟的基础设施。这个新的骨干技术为Tapestry日益壮大的社区提供了更多的必要支持。包括友好的URLs(允许使用文件夹,这样就可以使用J2EE的申明式安全机制),整合Tapestry和Java Portlet API,模块化应用程序等。另外,采用了更加成熟的参数连接技术和更灵活的持久化数据保存方式(使用HTTP请求参数保存数据)。对于JDK1.5的用户,更可以使用Java注释技术(annotations)代替XML技术来申明组件和页面。
???? 在很久的将来,Tapestry 5.0将会重新考虑组件对象模型。这样你编写的类就不必从Tapestry的类继承。页面和组件的类将都是POJOs(普通Java对象),Tapestry所需要的依赖关系则会被注入进去。

读书人网 >开源软件

热点推荐