`

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的组件及功能

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

    tapestry5中文文档

    tapestry5组件说明使用及登陆修改等简单实例

    Tapestry5最新中文入门实例教程

    本文介绍Tapestry框架版本5。本文利用Tapestry 5开发一个简单的具有创建/读/更新/删除功能的应用,在创建这个应用的过程中,本文体会到Tapestry...还将了解如何应用Tapestry中内嵌的Ajax功能来创建支持Ajax的组件。

    tapestry组件

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

    tapestry4.02中封装ext的GridPanel组件

    tapestry4.02中封装ext的GridPanel组件

    tapestry页面编辑组件

    tapestry页面编辑组件,可以实现文本框,单选框,多选框和下拉框等的自动生成,并返回改变后的数据。

    Tapestry5开发文档手册.doc

    tapestry5组件说明使用等简单实例。Apache Tapestry是一个使用Java语言创建web应用的面向组件的开发框架。Tapestry应用建立在根据组件构建的页面的基础上。这个框架能够提供输入验证(input validation)、本地化/...

    Tapestry5最新中文教程

    Zubairov合作撰写了一篇文章,详细介绍Apache Tapestry 版本5——一个面向组件web框架。文章向读者展示了创建组件方法,并谈到了Tapestry中的IoC以及Ajax的相关特性 译者 沙晓兰 发布于 2008年7月2日 下午9时30...

    tapestry 5.1.0.5 官方组件文档 天涯浪子

    来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref

    tapestry hibernate Spring应用及组件的使用

    tapestry hibernate Spring应用及组件的使用的一个简单完整例子,包含form组件、table组件的一个增删改查。其中数据库创建用户和表在docs里,数据库使用oracle

    Maven + Tapestry5.3.8 + Spring4.0.5 + Oracle10g

    2)Tapestry 各种核心组件的使用 3)自带验证,自定义验证,验证码的生成 4)Tree组件的使用,Grid的各种使用(修改样式,排序,隔行换色等等),Loop组件的使用 5)集合Spring4.0.5实现的增删改查 等等 如果你是新...

    Tapestry 5.1 实例教程(全部)

    Tapestry 5.1 实例教程(全部) Tapestry 5.1入门教程,包含基础入门及一些高级组件的使用教程,是学习Tapestry5.1不可多得的教程!

    Tapestry简单入门.rar_java Tapestry_tapestry

    Tapestry简单入门介绍,包含Tapestry入门、tapestry组件介绍

    tapestry技术

    Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html...

    Tapestry开发指南

    Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html...

    Tapestry5 使用教程

    Apache Tapestry是一个使用Java语言创建web应用的面向组件的开发框架。Tapestry应用建立在根据组件构建的页面的基础上。这个框架能够提供输入验证(input validation)、本地化/国际化(localization/...

    Tapestry4.1.2 入门-介绍

    不必关心链接!不必关心请求(http request)到了哪里!...Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性!

    Tapestry4.1.2入门-介绍

    Tapestry 不必关心链接!不必关心请求(http request)到了哪里!...Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性!

    tapestry table

    一个关于table在tapestry里应用的例子

Global site tag (gtag.js) - Google Analytics