版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Tapestry 核心tapestry-core 是提供接口和标注的 Tapestry API 模块。tapestry-core 构建于 Tapestry IoC 容器之上。新的和需要注意的在 Tapestry 5 之上的进展正在开启。这里列出最近已经被增加的一些重要的新功能。直接 声明在页面和组件模板内现在将会被转到客户端浏览器。从类名到页面名(或者组建类型)的映射也已经被简化去除那些冗余的。举 例 来 说 , 类org.example.myapp.pages.edit.EditUser 现 在 将 会 有edit/User 优于 edit/EditUser 的名字。这样就带来了短小、简洁,
2、自然的 URLs.组件的类型现在可能会在模板中使用元素名进行详细说明, 这样优于t:type 属性.(这是一个与 5.0.2 版本不相容的变化)现在运行于客户端(也可运行在服务器端)的一些基本的表单验证构建在script.taculo.us 上。默认的异常报告页已经被改良来显示详细的请求信息,过滤掉那些冗余的数据,还要现实出特定异常的文件内容。动态请求 URLs 已经被简化成统一的形式。 他们也可能包括一个查询叁数用以识别页面的动态的上下文关系。现在可以通过 Maven 获得可用的组件参考文件。一组返回值的”after”呈现阶段方法已经改变: 所有的呈现阶段方法返回true (或者 void)
3、 给默认的路径, 而且返回 false 给跳跃或者叫早的阶段。这样可能打破些现有的代码。组件操作器现在可能返回 StreamResponse 直接地将流送到客户端浏览器。 (这是给那些需要呈现图片、PDF 或者其他没有页面导向内容的组件提供的。)URL 根路径现在为一个应用程序呈现应用程序的开始页。 (过去使用servlet 容器呈现静态的欢迎页)信息、资源等所有同类方案以命名为基础查询.。方便快捷漂亮灵活可定制的 Grid 组件用以显示列表数据。表单验证组件将会使用与 BeanEditForm 相同的系统为字段确认默认的验证。当参数值被一个 Enum 类型绑定的时候,选择组件将会自动地提供一
4、个ValueEncoder 值编码器 和 SelectModel 选择模式 。BeanEditForm 组件能够自动产生出一个 form 并借可以关联控制以编辑任何 JavaBean 的属性。通过 Trails 和 BeanForm 获得的灵感。 (两者为Tapestry 4 的)不区分大小写的 URLs 方案。Tapestry 不再担心把页面名和组件标识放入URLs 的方案。现在他们用小些方案产生简洁的”Web 2.0”外观方案。而且他们也更短和更漂亮的!初始支持 application 状态对象。输入验证信息现在可能由提供一个包含组件的信息目录的详细信息 key值所替代。属性表达式现在应该
5、参考没有参数的公共方法除了传统的属性名外。页面模板现在被允许被储存在 Web INF 中 , 也可在 classpath 上。隐性标识, 藏于 Tapestry 组件在普通的 HTML 元素 (一个 Tapestry 4的喜爱功能) 内, 已经被增加进 Tapestry 5 。组件叁数默认值应该在运算时被计算。组件叁数可能有默认值。ComponentClass 标注, 在较早的录像中已经被移除。组件类Tapestry5 中的组件类比 Tapestry4 中的轻松容易很多。不在需要继承基类。类就是具体的类(没有抽象)也没有 XML 文件。仍然有一点是以 Java 标注形式进行配置的,但那些标注现
6、在直接声明在你的类属性上要优于放在抽象的 getters 和 setters 方法上(这是 Tapestry4 的方案)。.对于页面、组件和混合类都是使用同一种方法创建的。组件类基础在 Tapestry5 中创建页面和组件类是很容易的。与 Tapestry4 不同,在 Tapestry5 中组件类不再是抽象的,也不用继承框架的基础类。他们都是单纯的 POJOs 对象。只有一些约束:类必须是公有的。类必须在正确的包中,按照 application configuration.。类必须有一个标准的公用的无参的构造器。以下是一个非常基础的组件:..9.10.package
7、 ponents;import org.apache.tapestry.MarkupWriter;import org.apache.tapestry.annotations.BeginRender;11. public class HelloWorld12.13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.25. 26.BeginRendervoid renderMessage(MarkupWriter writer)writer.write(Bonjour from HelloWorld componen
8、t.);这个组建只有一个工作用来输出一个固定的信息。另一个和 Tapestry4 不同的是,这些方法不是必须为公有的。他们可以是你愿意的任何可见度方法。组件包组件类必须存在于适当的包内(这是对于运行时代码转换和类加载操作必须的)。这些包存在于应用程序的根包下。对于 page 页面,类应该放在 root.pages 下。页面的名字被映射到在这个包内的类名。对于 components 组件,类应该放在 ponents 下。组件类型被映射到在这个包内的类名。对于混合组件,类应该放在 root.mixins.混合类型被映射到在这个包内的类名。另外。对于应用程序要用到的共同的基础类,通常
9、是抽象基础类,他们不被直接引用。这些应该不放在 pages,components 或者 mixins 包内。因为他们随后会被有效的页面、组件和混合所替换。使用 root.base 包存放这些基础的类。子文件夹/子包类不是必须直接放在包里(pages,components,mixins 等)。可以正确的创建一个子包用来存储这些类。这个子包名成为页面或者组件类型的一部分。这样你可以定义一个页面组件 com.example.myapp.pages.admin.CreateUser ,这个逻辑页面名(显示在 URLs 上的)就会是 admin/CreateUser.Tapestry 执行一些简化的最佳
10、的逻辑页面名(或者是组件类型或者是混合类型)。他检查看如果包名是一个前缀或者后缀不合格的类名就删除前缀或者后缀。最终的结果是一个类名像这样 com.example.myapp.pages.user.EditUser 将有一个 user/Edit(不是 user/EditUser)的页面名.这样的目的是为了提供一个简单自然的 URLs.页面 vs. 组件在 Tapestry5 中二者的区别是非常非常小的。他们仅有的区别是包名。root.pages.PageName 用于页面。ponents.ComponentType 用于组件.在 Tapestry4 中,页面和组件有着很大差别。
11、 表现在当你的类从隔离接口和抽象层次继承的时候。在 Tapestry5 中,页面仍旧用于表现。但已是真正的 Tapestry 内部类。页面组件仅是页面组件树的根组件。类的转换Tapestry 使用你的类作为一个起点。他在运行时转换你的类。这是必要的,原因就包括 Tapestry 如何处理在请求间缓存页面。在大多数情况下,这些转变都是合理而无形的. In a few limited cases, they are maginally leaky - for instance, the requirement that instance variables be private - but we
12、feel that the programming model in general will support very high levels of developer productivity.在几个有限的情况下,他们被遗漏例如,需要一个被私有的实例变量但是我们感觉设计模式在通常都将支持非常高水平的开发效率。因为转换不会出现在运行时之前,事实上在你创建一个 Tapestry 程序,并且在构建程序阶段是不受影响的。此外,你的类在测试时是绝对简单的 POJOs 对象。动态类重载组件类的改变是被框架的。当类改变的时候将被重载。这允许你在不需要牺牲任何 Java 平台性能的情况下,构建应用的速度接
13、近于脚本环境。他是如此的快速。你都注意不到类魔术般的重载已经发生了。最终的结果:卓越的生产能力-改变你的类,立刻就能够看到变化。可是,类的重载只被应用在组件类上。其他的类,例如服务接口和实现,或者其他数据对象被普通的类加载器加载不被动态类重载。实例变量Tapestry 组件可以有实例变量(不像 Tapestry 4,你不得不使用抽象属性)实例变量必须是私有的。Tapestry 必须执行运行时类的修改来支持实例变量,并且只对私有变量。在你的类中可以有非私有的变量,但是这样你就会在你的程序中看到不可预料的异常行为,这是因为 Tapestry 对页面和组件的缓冲和重用。对含有非静态并且非私有的属性变
14、量,Tapestry 将输出一个错误日志。要知道的是你需要提供 getter 和 setter 方法以访问你类的实例变量。Tapestry 不会自己做的。瞬时的实例变量除非一个实例变量被标注修饰,否则他将成为一个瞬时变量。这意味着当请求范围结束后他的值将被设回默认值(当页面被丛请求中分离时)。如果你希望保留你的变量值在多个请求之间已打破重置逻辑,那么你应该在你的属性上增加一个 Retain 标注。你需要注意的是没有客户细节的数据被存在这个属性变量里,因为后面的请求,相同页面实例可能被不同用户使用。同样,相同用户后来的请求,也可能是不同的页面实例被使用。使用持久属性在一个请求到另一个请求间保留信
15、息.此外,final 属性是最终的。是不会被重置的。构造器Tapestry 将会使用默认的无参构造器来实例化你的类。其他的构造器将被忽略。注入依赖注入通过附加的标注发生在属性级别。在运行时,属性包含的注入会变成只读的。参数在你的类中组件参数也被定义为使用私有属性,使用参数标注。持久化属性属性被标注以便他们在请求间保留他们的值。内嵌组件组件经常包含其他组件。在其他组件的模板内部的组件被称为内嵌组件。这个包含内嵌组件的模板将包含 Tapestry 命名空间的专有元素,确定那个内嵌组件的位置。你可以在模板中定义组件类型,或者你可以使用组件标注去定义组件类型和参数为组件产生一个实例变量。例如1.2.3
16、..8.9.package org.example.app.pages;importorg.apache.tapestry.annotations.Component;ponents.Count;publicclass Countdown7.38.39.Component(parameters = start=5, end=1, value=countValue)pri
17、vate Count _count;private int _countValue;public int getCountValue()return _countValue;public void setCountValue(intcountValue)_countValue = countValue;40.41.42.以上定义组件的内嵌组件注意在组件类里默认的绑定前缀是prop:,在上面的例子中我们可以写成value=prop:countValue来完整的显示绑定。然而,某些字面值,比如上例中的数字字面值被接受绑定 prop:前缀,即使他们并不是真正的属性(这给程序开发者带来了极大的方便)。我们也可以使用literal:前缀,start=literal:5可以完成同样的事情。我们可以在组件模板中指定其他的参数,但是组件类里的参数优先/组件模板在 Tapestry 里,组件模板是与页面或者组件类相关的文件,用来包含组件连同他的一些嵌入的组
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Lesson3-4单元知识梳理(期末专用)(课件)-2025-2026学年科普版(2012)英语四年级下册
- 某食品加工厂质量管理条例
- 查理芒格:这五个行业未来20年永不过时
- 产品设计规范与输出模板集
- 艺术品交易市场维护承诺书4篇
- 2026年家政服务员资格考试冲刺模拟试卷及答案(共三套)
- 生物医药研发实验室操作指南
- 2026年高考语文十校联考全真模拟试卷及答案(共四套)
- 合同造价部2026年上半年工作总结
- 旅游公司总经理面试技巧
- 口腔正畸考核制度
- 挂篮使用说明书
- ARM Cortex-A9多核嵌入式系统开发教程
- 员工合规意识培训
- 大学艺术教学中跨学科融合的创新实践教学研究课题报告
- 2026年鄂尔多斯职业学院单招职业倾向性测试题库附答案解析
- 涵洞施工技术培训课件
- 水产养殖安全知识培训课件
- 综合管理部自查自纠存在问题及整改措施
- 2025-2026学年苏科版八年级下册数学 第十章 分式 单元巩固测试卷(含答案)
- 2026年内蒙古单招机电专业技能实操模拟题库含答案
评论
0/150
提交评论