常识:
"@"表示访问类的静态变量或静态方法. 例如:value="ognl:@com.ttdev.shop.ProductDetails@ADD_TO_CART_BUTTON"/>
一。tapestry模板中用到的组件有两种,一种是隐含组建常用jwcid="@XXX"的格式调用;另外一种是显式声明式组建,常用jwcid="XXX"的方式调用;
二。tapestry的组件中:有的组件使用了本身的body,有的没有使用本身的body. 凡是在tapestry组件规范中声明allow-body属性为allowed 的,即该组件使用了本身的body.否则则没有使用本身的body.
注意:不能在allow-body属性为removed 的组件中嵌套其他的组件,否则tapestry会报错。
三。组件的id。
对于显式组件其id就是该组件的名称。对于隐含式组件如果没有在"@"号前指定id,则为匿名的组件,此时tapestry会在组件名称前加上"$"符号,例如第一个匿名@Insert组件会被带上默认的id:"$Insert" ,在这之后的@Insert组件则会依次默认为“$Insert$0”, “$Insert$1”, 等;
三。监听方法的可以带参数,也可以不带参数;其返回类型可以是void,string,或实现了IPage接口的object
几种可用的监听方法有:
public type method(parameters)
public type method(IRequestCycle cycle, parameters)
public type method()
public type method(IRequestCycle cycle)
四,input组件输入值的验证
tapestry3中的验证仅仅限于vaildField组件,但在tapestry4.o中,可以面向所有的input组件。
五。属性注入:
包括:元数据注入,对象注入,页面注入,脚本注入,状态注入,
1。页面注入常用于监听方法中(例如):
<inject property="detailsPage" type="page" object="Details"/>
public abstract Details getDetailsPage();
public IPage doShowDetails(long productId)
{
Details details = getDetailsPage();
details.setProductId(productId);
return details;
六.tapestry中的临时对象和持久对象
transient state临时状态 (state that is only needed during the actual processing of the request)
persistent state持久状态 (state that should be available during the processing of this and subsequent requests).
object pool 对象池 :Tapestry uses an object pool to store constructed page instances. As a page is needed, it is removed from the page pool. If there are no available pages in the pool, a fresh page instance is constructed.
在tapestry3.0及早期的版本中,对于持久的状态都保存在httpSession里面。但是从tapestry4.开始,可以放在httsession中,也可以放在Client中;
七.tapestry4中属性元素的声明
从tapestry4.0开始,在.page文件中声明的属性不需要规定其类型;tapestry4会自己在.java文件中寻找与该属性对应的getter,setter方法,然后根据getter,setter方法的操作类型,来确定属性的类型;
八. tapestry中使用HiveMind
tapestry和HiveMind有密切的联系,可以将hiveMind1.1邦定到tapestry4.0,可以用HiveMind管理tapestry : 用于将属性或服务通过tapestry的<inject/>注入到tapestry实例中;
举例说明具体用法:
1. 在项目中配置好 HiveMind.xml配置文件,HiveMind.xml的文件结构可以是:META-INF/hivemodule.xml 或 /WEB-INF/applicationId/hivemodule.xml 或 /WEB-INF/hivemodule.xml
(如下片断):
<!-- 注册聊天服务 -->
<contribution configuration-id="tapestry.services.ApplicationServices">
<service name="chat" object="service:ChatService"/>
</contribution>
<!-- 聊天服务 -->
<service-point id="ChatService" interface="org.apache.tapestry.engine.IEngineService">
<invoke-factory>
<construct class="com.ce.dnaq.chat.qiantai.XChatService">
<set-object property="responseRenderer" value="infrastructure:responseRenderer"/>
<set-object property="response" value="infrastructure:response"/>
<set-object property="linkFactory" value="infrastructure:linkFactory"/>
</construct>
</invoke-factory>
</service-point>
2.在需要该服务的.page文件中声明
<inject property="service" object="engine-service:chat" />
3.在对应的java文件中:
/**注入服务*/
public abstract IEngineService getService();
解释说明: 在.page文件中的前缀"engine-service:" 是tapestry扩展了HiveMind的服务的名称; "engine-service:chat"表示注入tapestry的chat服务,该服务(即:chart)在HiveMind.xml配置文件中已经配置好。
tapestry扩展的服务名称有:"app-property , engine-service ,global-property ,infrastructure"
各个作用说明如下:
(1).app-property :
用于 The application specification's <meta> properties
The servlet's <init-parameter> elements
The servlet context's <init-parameter> elements
The delegate property source (a <extension>)
A HiveMind symbol
用法示例: app-property:org.apache.tapestry.template-extension
(2). engine-service :
The locator is the name of an engine service (an instance of IEngineService).
用法示例: engine-service:page
(3). global-property:
定义在 servlet <init-parameter>, a servlet context <init-parameter>, or a HiveMind symbol. 中的全局属性名称;
用法示例: global-property:org.apache.tapestry.disable-caching
(4). infrastructure :
由tapestry.Infrastructure service提供的属性, this service provides access to the key Tapestry services.
用法示例: infrastructure:applicationSpecification
九. Friendly URLS 结合 HiveMind 的使用
1. 在HiveMind文件中有如下配置;
<!-- 部署FriendlyURL -->
<contribution configuration-id="tapestry.url.ServiceEncoders">
<direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect" />
<page-service-encoder id="page" extension="page" service="page" />
<page-service-encoder id="external" extension="external" service="external" />
<asset-encoder id="asset" path="/assets" />
<extension-encoder id="ext" extension="svc" after="*" />
</contribution>
在web.xml中配置 <servlet-Mapping> 例如:
<servlet-mapping>
<servlet-name>dnaq</servlet-name>
<url-pattern>*.page</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dnaq</servlet-name>
<url-pattern>*.external</url-pattern>
</servlet-mapping>
2.说明:
A. <page-service-encoder id="page" extension="page" service="page" />表示任何的.page页面访问被视为page templates对待。
如果将其改为 <page-service-encoder id="page" extension="html" service="page" />表示将所有的对.html的访问被视为page templates对待。
B. <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect" />
direct:表示内部组件在刷新,提交(表单)时,是否单独刷新内部组件而不刷新整个页面,一般情况下为true,及不刷新整个页面.(P250 Enjoin Web Dep开发)
示例URL: A typical URL might be: /admin/Menu,border.link.direct.
表示以 .direct后缀结尾的内部组建id名称为“border.link”的组件状态是没有状态的。
如果是以.sdirect后缀结尾,则表示是有状态的(放在httpsession范围内)。
C. <asset-encoder id="asset" path="/assets" />
在web.xml中配置<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>/assets/*</url-pattern>
</servlet-mapping>
用于asset service,asset service负责将本地资源返回给请求资源的客户端,但为了防止客户端的非法资源请求,可以在此限定可以访问的路径;本例中:即path="/assets",也就是只有在 "/assets"目录或其子目录下的资源才能被客户端所请求。例如:app/assets/image/tt.jif
十. tapestry属性配置
tapestry属性,有的是直接在程序中声明使用,有的是JVM属性,需要在服务器中才能有效;
十一. Tapestry对象属性。(Object Properties)
一个page有许多属性(继承自AbstractComponent或BasePage等基类),也包含许多组件和其他对象的属性. Pages是和engine相关联的, engine暴露他自身的一些属性。这些属性包括如下:
assets(Icomponent),beans(Icomponent),bingdingNames(Icomponent),bingdings(Icomponent),body,bodyCount,components(Icomponent),changObserver(Ipage),classObserver(IEngine),container,disabled,displayName,engine,form,global,id,idPath,listeners,locate,local,location,messages,name,namespace,outputEncoding,page,propertySource,pageName,pageSource,rendering,requestCycle,scriptSource,specification,sepcification,specificationSource,vist(IEngine),vist(Ipage)等;
分享到:
相关推荐
本压缩包包含了一系列的学习资源,帮助开发者深入理解和掌握Tapestry 4和5的关键概念和技术。 1. **Tapestry5最新中文教程.doc**: 这份文档可能是针对Tapestry 5的最新中文教程,旨在为初学者提供一个易懂的入门...
【Tapestry4开发指南】 Tapestry4是一款基于...随着对Tapestry4的深入学习,你会发现它在构建复杂、高性能的Web应用时的强大潜力,同时,Hivemind的集成使你能够灵活地调整和扩展框架的功能,以满足特定的业务需求。
4. Tapestry 使得开发的应用很容易维护和升级。 Tapestry 的应用场景: 1. Tapestry 适合开发大型的 web 应用程序。 2. Tapestry 适合需要强大灵活性的 web 应用程序。 3. Tapestry 适合需要快速开发和维护的 web ...
《Tapestry 4开发指南》是一本专为初学者设计的书籍,旨在帮助读者深入理解和熟练运用Tapestry 4这一强大的Java Web框架。Tapestry 4是一款开源的、基于组件的Web应用程序框架,它允许开发者用更加面向对象的方式来...
《深入浅出Tapestry4》是一本专为开发者深入理解Tapestry4框架而编写的书籍。Tapestry4是Apache软件基金会开发的一个开源Web应用程序框架,它以组件化和事件驱动的方式,极大地简化了Java Web应用的开发。本章节我们...
"Tapestry4 Users Guide" 和 "Tapestry4 Quick Start" 这两份文档,分别提供了全面的用户指南和快速入门教程,帮助开发者了解和掌握Tapestry 4的使用方法和最佳实践。 10. **社区支持**: 作为Apache项目的一部分...
Tapestry4是一个基于Java的Web应用程序框架,由Howard Lewis Ship开发。它的核心理念是将用户界面组件与业务逻辑分离,提供一种声明式编程模型,使得开发者可以更专注于应用程序的逻辑而非底层的HTML和HTTP细节。...
"深入浅出Tapestry4一书"的源代码是作者为了帮助读者更直观地理解Tapestry4的工作原理和实践应用而提供的。 在源代码中,"IceRoom"可能是一个示例项目,它展示了如何使用Tapestry4创建动态Web页面。IceRoom项目可能...
Tapestry是一个强大的Java web应用程序框架,由Apache软件基金会维护。它以其组件化、模版驱动的架构而闻名,使得开发高效、可维护的大型Web应用变得更加容易。在这个“Tapestry学习文档”中,我们可以深入理解这个...
Tapestry4开发指南.rar Tapestry4开发指南.rar Tapestry4开发指南.rar
本压缩包包含了丰富的Tapestry学习资料,总计约25M,涵盖了各种教程、教材和实践案例,对于想要深入理解和掌握Tapestry的开发者来说,是一份非常宝贵的资源。 1. **Tapestry基础** Tapestry基于组件模型,每个网页...
是一本由多本Tapestry资料整合而成。包括一些Tapestry的实例。
Tapestry4 是一个MVC(Model-View-Controller)框架,提供了一种声明式编程模型,使得开发者可以更专注于业务逻辑,而不是页面的组装。Spring 是一个全面的后端框架,它提供了依赖注入、事务管理、AOP(面向切面编程...
虽然Tapestry 4的中文文档较少,但提供的《Tapestry4 用户指南》和《Tapestry4 快速启动》是宝贵的参考资料。它们将帮助初学者理解Tapestry的基本概念、组件使用、事件处理等方面的知识。 总的来说,Tapestry 4是...
Tapestry4是一款基于Java的Web应用程序框架,它在2000年代初期非常流行,由Apache软件基金会维护。这个框架的主要目标是提供一种高效、易于理解和使用的工具,用于构建动态、数据驱动的Web应用。以下是一些关于...
《Tapestry学习资料》是一份综合性的资源集合,涵盖了Tapestry框架的三个主要版本:Tapestry 3、4和5。这份资料旨在帮助开发者深入理解和掌握Tapestry框架,提升Web应用开发的效率和质量。 Tapestry是由Apache软件...