`

Tapestry 5组件事件

阅读更多
Tapestry 5组件事件
 
本文根据http://tapestry.apache.org/tapestry5/tapestry-core/guide/event.html翻译整理过来,请高手指正,转载请注明出处!
 
本人随后时间将忙于单点登录研究,翻译Tapestry 5的时间不多,稍后章节翻译将会较慢,还望各位继续支持!
 
组件事件
 
组件事件是指组件所察觉到的用户的行为,如点击链接或提交表单。
 
组件主要用于两种用途:
  • 它们呈现了用户在客户端浏览器中触发链接或表单发起的请求。这些在页面导航(page navigation请求处理(requst processing)中有更全面的描述。
  • 它们描绘了一个请求中的控制流即允许一个组件通知它的容器一些情境(一个表单被提交),或者从容器中收集一些片断数据。
通常,一个导航请求(由用户发起)将产生许多控制流请求。如,表单组件被将一个动作请求触发,然后发送通知事件声称表单提交事件将被处理,随后不管成功与否。
 
Tapestry 4中,你可以用一个方法名来配置组件的一个参数,当某一特定事件发生时(通常来自客户端的请求)该方法将被调用。如:
  1. <form jwcid=”@Form” listener=”listener:someMethodName”>  
这有一些局限性,包括事实上仅有一个方法被调用。
 
Tapestry 5引入了通过命名约定或者OnEvent annotation来标识的事件处理方法(event handler methods)。事件处理方法可以有任何的可见性,甚至私有的(通常它们是包可见性的,用以支持测试)。
 
同比于配置组件一个被调用的特定的方法,你可以标识一个或多个方法来监听组件事件。单独的一个事件处理方法可以接收许多不同组件的通知事件,如在事件处理方法上加上@OnEvent(component={"component1", "component2"})
 
比如,这里是一个让用户选择110数字的页面片断(就叫"chooser"):
  1. <p> Choose a number from 1 to 10: </p>  
  2.   
  3. <p>  
  4.     <t:count end="10" value="index">  
  5.         <a t:id="select" t:type="actionlink" context="index">${index}</t:comp>  
  6.     </t:count>  
  7. </p>  
 
ActionLink组件创建一个动作URL
 
URL标识了页面包含的组件("chooser"),事件的类型(除非不是默认且很通常的"action"事件类型),页面里组件的id"select")还有附加的上下文(context)值。
 
 
当存在附加的上下文值时,它们被追加到路径中。
 
这里示范了Tapestry与传统方式URL的关键区别,它是一个面向动作的框架。这里的URL并不是说链接被点击时发生了什么,而是标识哪个组件来响应。
 
没有从URL到一段代码的简单映射;这里通过调用事件处理方法的形式来替代组件发送通知事件。
 
当组件生成的链接被用户点击时,一个Java方法将会被调用。
  1. @OnEvent(component = "select")   
  2.  void valueChosen(int value)   
  3.  {   
  4.     _value = value;   
  5.  }   
 
Tapestry在此做了两件事:
  • 确认valueChosen()方法作为调用的方法。
  • 将上下文值从字符串转换为整数并传送给事件处理方法。
在上面的实例中,valueChosen()方法将在choose组件产生任何事件时被调用(至少有一个上下文值)。因为ActionLink组件仅产生单个事件类型,即"action",这不会带来任何问题(OnEvent可以配置事件类型)。
 
某些组件能产生多种事件,些时你需要更多的细节参数:
 
 
  1. @OnEvent(value = "action", component = "select")   
  2.  void valueChosen(int value)   
  3.  {   
  4.     _value = value;   
  5. }   
 
 
OnEvent annotationvalue属性用来匹配事件名。
"action"是默认的事件类型名,ActionLink Form组件都使用这个事件类型。如果你省略了OnEvent annotationcomponent参数,它就是收到所有包含组件的通知事件,可能包括内嵌组件(因为事件冒泡机制event bubbling)。
你可以限定接收哪个或哪些组件的事件。
 
事件处理方法命名约定
 
作为使用annotations的一种替代,我们可以以指定的方式命名事件,Tapestry将会调用你的方法,就好像方法被声明了annotation一样。
 
这种事件处理方法的命名方式以前缀"on"开头,紧跟着动作的名字(首字母大写capitalized),然后加上"From" 一个首字母大写的组件id
先前的例子可以写成:
 
  1. void onActionFromSelect(int value)   
  2. {   
  3.    _value = value;
  4. }   
 
如果事件类型命名为"onAny",它将接受所有事件类型,我们很少需要此种方式!
如果出于某些难解的原因我们需要以同一方法接收不同组件的相同事件,我们就需要OnEvent annotation
 
来自Howard的提示:我发现我更喜欢命名约定方式,保留annotation只是为了其他不适合的情况。
 
事件上下文(Event Context
 
上下文值(ActionLink组件的context参数)可以是任何对象,然而,仅发生一个简单的字符串转换。与Tapestry 4相比,他有一个精细的类型机制,怪名叫"DataSqueezer"
 
此外,不管是什么值(string, number, date),它都会被转换为文本字符串。这将形成一个更可读的URL
 
如果带有多个上下文值(通过将一个对象list或数组绑定到ActionLinkcontext参数),则每一个值都将有序地追加到URL中。
 
当一个事件处理方法被调用时,将发生一个强制(coercion)从字符串到实际类型的转换。事件处理方法仅当上下文值的数量至少与方法参数数量一致时被调用,带有过多参数的方法将被跳过。
 
另外,一个事件处理方法还可以带上一个java.lang.Object[]类型的参数。这个参数会接收整个上下文数组。这在上下文不同时间为不同长度时有用处。我们可以使用一个个显式的参数或者单个的Object[]类型的参数。
 
事件冒泡(Event Bubbling
 
事件会冒泡向上传递到层级,直到它被终止。事件在事件处理方法返回一个非null值时终止。
对于页面导航事件,事件处理方法的返回决定了Tapestry将如何呈现响应。
 
分享到:
评论
9 楼 iRoyce 2007-07-11  
楼上的可以去http://www.iteye.com/subject/Tapestry5专栏看chinajavawolf翻译的...他应该已将官方文档全翻译了!

我原本是想大部分翻译的, 不过chinajavawolf很快就翻译了其他章节, 看他翻译了...我也就停工了....^_^
8 楼 sueny589 2007-07-11  
要是有一本全的就好了
7 楼 lyo 2007-04-17  
tapestry 好像只支持 jdk1.5了,起码所有的文档都是针对jdk1.5编写的?
6 楼 iRoyce 2007-04-03  
是个好想法....稍后联系满江红......
5 楼 Ghostbb 2007-04-02  
支持一下!
4 楼 KorbenZhang 2007-04-02  
建议在满江红建立翻译项目,1为更多人参与,2为可以结集出版
3 楼 iRoyce 2007-04-01  
我只翻译基础核心部分, 主要是CORE包的大部分,其他部分视情况而定,而且目前CORE包里留下的章节内容并不多了....

THANKS!
2 楼 jamesby 2007-04-01  
楼主是不是要全部翻译啊?
如果
Component Classes
Component Templates
Component Parameters
Page Navigation
Input Validation
Component Events
Page Lifecycle
Component Mixins
Localization
Assets
Type Coercion
Component Rendering
Persistent Data
Application State
Injection
Aliases
Configuration
Request Processing
DOM
Class Reloading
Unit testing pages/components
全部翻译要好长时间噢。
建议楼主一篇文章多翻译几个部分。
1 楼 sun58224 2007-04-01  
辛苦了!

相关推荐

    tapestry5 自定义组件

    这个过程需要对 Tapestry 5 的组件模型有深入理解,包括生命周期、事件处理、依赖注入等概念。通过这样的自定义组件,开发者可以轻松构建复杂的功能,如邮件发送,同时保持代码的清晰和模块化。

    tapestry4.02中封装ext的GridPanel组件

    在`GridPanel.java`中,会定义Tapestry组件的Java类,包括属性、方法和事件处理逻辑。 3. **配置模板**:编写对应的HTML/TML模板文件,如`GridPanel.tml`,在这个模板中,可以通过Tapestry的标记语言来创建...

    Tapestry的组件及功能

    介绍Tapestry组件的使用和功能。内容还行,使用初学者入门。

    Tapestry 5 Building Web Applications.pdf

    - **Tapestry 5 框架的核心理念**:理解 Tapestry 5 如何通过组件化设计实现代码重用和模块化。 - **组件模型**:深入探讨 Tapestry 5 中的组件模型,包括如何定义和使用组件。 - **页面生命周期**:了解 Tapestry 5...

    Tapestry 5 電子書

    本书首先会介绍Tapestry 5的基本概念,包括组件模型、事件处理和页面生命周期。组件是Tapestry 5的核心,它们是可重用的、自包含的代码块,可以是简单的HTML元素或者复杂的用户交互逻辑。读者将学习如何创建和定制...

    Tapestry 5开发指南(英文)

    - **事件传播**:Tapestry 5支持事件系统,允许组件间通信。事件可以在组件内部触发,也可以在父组件和子组件之间传递。 - **命令对象**:命令对象用于封装用户交互,如按钮点击,这些操作可以触发一系列业务逻辑...

    tapestry5中文文档

    Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证、本地化、状态管理和URL映射等功能。Tapestry 5 强调易用性,不仅对终端用户友好,...

    tapestry页面编辑组件

    在Tapestry中,这些组件不仅可以方便地呈现和管理用户输入,还可以配合各种事件处理程序,如onChange、onSubmit等,实现复杂的业务逻辑。同时,Tapestry的类型安全机制确保了服务器接收到的数据是经过验证的,减少了...

    Tapestry5最新中文教程

    Apache Tapestry 5 是一个基于Java的开源Web应用程序框架,其设计目标是提供一个面向组件的开发环境,简化Web应用的构建。这个框架的核心特点包括输入验证、本地化/国际化、状态管理和URL处理等,旨在提高用户体验和...

    Tapestry5开发文档手册.doc

    Apache Tapestry 5 是一个基于Java的Web应用开发框架,其核心理念是组件化开发,通过构建组件来创建页面。Tapestry 5 提供了一系列的功能,包括输入验证、本地化/国际化、状态管理和URL映射,使得开发者能更高效地...

    Tapestry5最新中文入门实例教程

    - **组件驱动的开发模型**:Tapestry 5采用组件化的开发方式,每个页面或页面的一部分都可以作为一个独立的组件进行开发,这极大地提高了代码的复用性和维护性。 - **内置的Ajax支持**:Tapestry 5内置了对Ajax的...

    tapestry组件

    tapestry部分组件绑定参数的列表!

    tapestry 5 ..........

    ### 关于Tapestry 5的关键知识点 #### 1. 什么是Tapestry? Tapestry是一个开源框架,用于创建动态、稳健且高度可扩展的Java Web应用程序。它补充并建立在标准Java Servlet API之上,因此可以在任何Servlet容器或...

    Tapestry.5.Building.Web.Applications.pdf

    1. **组件化编程**:Tapestry 5 强调基于组件的开发模式,每个组件都是一个可重用的 UI 单元,这使得代码更易于管理和维护。 2. **自动表单处理**:Tapestry 5 自动管理表单提交过程中的数据绑定和验证,极大地简化...

    Tapestry简单入门.rar_java Tapestry_tapestry

    接下来,我们转向"tapestry组件.docx",组件是Tapestry的核心组成部分,它们是可重用的、自包含的代码单元,可以处理用户交互、展示数据或执行业务逻辑。组件可以是简单的HTML元素,也可以是复杂的UI部件。组件的...

    Tapestry 5 Project 5.0.16 API

    6. **模板语言**:Tapestry 5使用一种基于HTML的模板语言,允许在HTML中嵌入组件和事件处理。这种语言既保留了HTML的语义,又提供了与Java的紧密集成。 7. **国际化和本地化**:Tapestry 5支持多语言环境,通过资源...

    tapestry官方中文文档

    总的来说,Tapestry 4是一个强大且灵活的Web开发框架,通过其组件化、声明式编程和事件驱动的特性,能有效提高开发效率,同时保持代码的整洁和可维护性。对于想要深入Java Web开发的开发者来说,掌握Tapestry的知识...

    tapestry5 build web application-alexander

    这本书详细介绍了Tapestry 5的核心概念和技术,包括组件模型、页面生命周期、事件处理、表单处理、国际化、性能优化、测试以及与其他技术(如Spring、Hibernate)的集成等。通过阅读此书,读者能够深入理解Tapestry ...

Global site tag (gtag.js) - Google Analytics