常识:
"@"表示访问类的静态变量或静态方法. 例如: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)等;
分享到:
相关推荐
本书《Enjoy Web Dev With Tapestry》不仅是一本入门指南,更是一部深入浅出的实战教程,旨在让读者在学习过程中体验到开发的乐趣。以下为本书的主要特点: 1. **易于上手**:即使是没有Servlet或JSP背景的读者也能...
qt6.7的mqtt库
特别训练事业单位招聘考试计算机类岗位专业训练题及复习资料.doc
,,新能源汽车热管理分析之某新能源汽车项目热管理1D分析模型及报告。 所用软件为KULI。 每个工况对应一个系统模型。 分析级别为整车级别(含空调 冷却 ),工况丰富。 电子资料,该资料对新能源汽车工程师热管理的设计,匹配及1D分析的能力有极大提升。 ,新能源汽车热管理分析; 1D分析模型及报告; KULI软件应用; 整车级别分析; 丰富工况; 电子资料; 热管理设计; 匹配; 能力提升。,KULI软件下的新能源汽车项目热管理1D分析模型与报告
通信行业安全生产知识中国铁通内部版.doc
项目管理使用软件Porject使用手册.ppt
《CST微波工作室入门教程》总结
base.apk (8).1
Comsol锂离子电池热管理模型 电化学热耦合模型: 内容: 锂离子电池PCM仿真瞬态计算,计算流道液冷情况下锂离子电池放电时的温升情况 包括流速分布,温度分布,相变材料的相变过程模拟等 COMSOL程序物理场公式说明建模过程 ,Comsol锂离子电池热管理模型; 锂离子电池PCM仿真; 瞬态计算; 流速分布; 温度分布; 相变材料模拟; COMSOL物理场公式建模。,COMSOL锂离子电池热管理模型:流速与温度分布的瞬态仿真研究
身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化,身边经常有同学丢失了东西或者衣服而烦恼,为了找到自己心爱的物品疲于奔命,还不一定能找到,为了满足学生失物招领的要求,校园失物招领系统被开发研究了出来。 本文主要描述了该校园失物招领系统的具体开发过程,在SSM框架的基础上,采用vue技术和MYSQL数据库,使该校园失物招领系统具有很好的稳定性和安全性。本设计重点从系统概述、系统分析、系统设计、数据库设计、系统测试和总结这几个方面对该校园失物招领系统进行阐述,用户通过该校园失物招领系统可以查询自己喜欢的信息。 该校园失物招领系统不仅能够稳定的运行,快捷方便的操作,界面简洁清晰,而且功能齐全,实用性强。 关键词:校园失物招领系统,SSM框架,系统分析,数据库设计
德国大陆ARS408-21毫米波雷达数据资料,典型应用领域: - 汽车前向AEB/ACC/FCW等ADAS和自动驾驶等场景 - 起重机(RTG,RMG,STS,桥式起重机,龙门起重机)的避障防撞、作业区监测等 - 远程区域监控(适用于危险或不能进入的区域) - 目标分类 - 雨雾霾雪等复杂环境下的目标检测 - 道闸防砸检测
简单的购物车系统,实现了前后端分离
实现了uboot2012移植至友善之臂mini210上(无法正常启动内核)
利用matlab软件根据谐波叠加法生成三维路面不平度信息及路面txt文件,转成rdf导入recurdyn中可直接生成不同等级仿真路面模型。 ,关键词:matlab软件;谐波叠加法;三维路面不平度信息;路面txt文件;转成rdf;recurdyn;不同等级仿真路面模型。,MATLAB生成三维路面不平度及转RDF导入RecurDyn仿真模型
2023-04-06-项目笔记-第四百三十八阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.436局变量的作用域_436- 2025-03-15
思远烘焙管理软件(客户方案).doc
FDTD仿真宽角度可见光吸收器,一篇2区文章,模型文件包含FDTD仿真文件以及一份简说明教程 ,核心关键词:FDTD仿真;宽角度可见光吸收器;2区文章;模型文件;FDTD仿真文件;简说明教程;,FDTD仿真宽角度可见光吸收器模型:2区文章详解与教程
如何通过阅读习惯提升团队协作能力
基于plc控制的水果糖粒包装机系统设计 程序 图纸 文章1.4万字 运行动画仿真 ,基于plc控制; 水果糖粒包装机; 系统设计; 程序; 图纸; 运行动画仿真,基于PLC控制的糖粒包装机系统设计与仿真