本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/event.html
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
Component Events
组建事件
组件事件是组件意识到用户行为的方法,就像点击链接和提交表单。
组件事件被用来两种用途:
经常,一个导航请求(由用户发起)将产生许多控制流请求。例如:一个表单组件将被一个动作请求触发,并且随后将在表单提交被要处理时发出一个通知事件,无论成功与否。
在Tapestry4里,你可以使用方法名配置一个组件参数,当某一事件发生时该方法被调用,通常是一个客户端请求。
这有一些局限性,包括事实上仅有一个方法被调用。
Tapestry5引入了事件处理器方法概念,他通过命名约定或者OnEvent标注来确定。事件处理器方法可以拥有任何可见度,甚至是私有的(通常他们被提供包级别的可见度,以支持测试)。
你指定一个或多个方法去监听组件事件要优于配置一个组件去调用特定的方法。单独的一个事件处理器方法可以接收多个不同组件的通知事件
例如,这是页面的一部分(让我们称他为“Chooser”),用来让用户选择从1到10的数字。
- <p> Choose a number from 1 to 10: p>
-
- <p>
- <t:count end="10" value="index">
- <a t:id="select" t:type="actionlink" context="index">${index}t:comp>
- t:count>
- p>
ActionLink组件产生一个动作
URL.
URL标识了页面包含的组件("chooser"),事件类型(除非他是“action”,默认的和最常用的事件类型),页面中的组件id(“select”),加上附加的上下文值(s)。
例: URL: http://localhost:8080/chooser.select/3.
当有附加的上下文值时,他们被追加到路径里。
这里示范一个Tapestry和传统框架动作的关键区别。这里的URL并不是说链接被点击时发生了什么,而是标识哪个组件来响应。
从URL到一小段代码没有简单的映射;这里通过调用事件处理器方法的形式来替代组件发送通知。
当组件链接被用户点击的时候,一个Java方法被调用。
- @OnEvent(component = "select")
- void valueChosen(int value)
- {
- _value = value;
- }
Tapestry 在这要做两件事情:
- 确认valueChosen()方法作为被调用的方法。
- 将上下文值从字符串转换为整形并交给方法处理。
在上面的例子中,valueChosen()方法将被choose组件产生任何事件时调用(至少有一个上下文值)。
因为ActionLink组件仅产生单个事件类型,即"action",这不会有任何问题。
有些组件能产生多种事件类型,些时你将需要更多的细节参数:
- @OnEvent(value = "action", component = "select")
- void valueChosen(int value)
- {
- _value = value;
- }
OnEvent标注的属性值和事件名相匹配。
"action"是默认的事件类型名;ActionLink和表单组件都适用这个事件类型。如果你省略了OnEvent标注的组件部分,那么你将收到所有包含的组件通知事件,可能包括嵌套的组件(由于事件的冒泡机制)。
你可以明确限定希望接收哪个组件的事件。
事件处理器方法命名约定
作为使用标注的一种替代,你可以以指定的方式命名事件,Tapestry将会调用你的方法就像他们被标注了一样。
这种方式的命名方式是在事件控制器方法前面使用"on"前缀,跟着是动作名(首字母大写)。接下来你应该追加"From"和一个首字母大写的组件id.
前面的例子可以被重写成:
- void onActionFromSelect(int value)
- {
- _value = value;
- }
如果事件类型命名为"onAny",它将接受所有事件类型,你很少需要此种方式!
Howard的提示:我发现我更喜欢命名约定,保留标注只是为了其他不适合的情形。
事件上下文
上下文值(ActionLink组件的context参数)可以是任何对象,然而,仅发生一个简单的字符串转换。与Tapestry 4相比,他有一个精细的类型机制有一个古怪的名字叫"DataSqueezer"。
此外,不管你的值是什么(string, number, date),它都会被转换为无格式字符串。这将形成一个更容易读的URL。
如果你有多个上下文值(通过将一个对象list或数组绑定到ActionLink的上下文参数),则每一个值都将按序地被追加到URL中。
当一个事件处理器方法被调用,将发生一个强制从字符串到实际类型的转换。事件处理器方法仅当上下文值的数量至少与方法参数数量一致时被调用,带有过多参数的方法将被忽略。
另外,一个事件处理方法还可以带上一个java.lang.Object[]类型的参数。这个参数会接收整个上下文数组。这是有用的,例如,这在上下文不同时间为不同长度时。我们可以使用一个个显式的参数或者单个的Object[]类型的参数。
事件冒泡机制
事件会冒泡向上传递到层级,直到它被终止。当事件处理方法返回一个非null值时事件被终止。
对于页面导航事件,事件处理器方法的返回值决定了Tapestry将如何呈现响应。
分享到:
- 2007-05-09 22:47
- 浏览 1674
- 评论(0)
- 论坛回复 / 浏览 (0 / 2250)
- 查看更多
相关推荐
Tapestry是一项基于组件的web展现层技术,这里将它划分成业务工程HelloTapestry及Component工程源码两项.实际项目中,Component可以成为不同项目中抽离出来的通用的模块,与具体的业务脱离。
- **实现方式**: 通过`<tapestry:link>`标签或`<tapestry:component>`中的`href`属性来实现页面间的跳转。 - **应用场景**: 用户操作后导航到新的页面。 **1.3 初始化** - **初始化方法**: `init()`方法是在组件...
<tapestry:propertySelection name="country" label="Country" model="${countries}" /> ``` **14. Table组件:** - **用途:**用于创建表格。 - **示例代码:** ```xml <tapestry:table data-model="${users}...
1. **Tapestry Core**: 这是Tapestry框架的基础部分,包含了核心组件、服务容器(Tapestry IoC)和页面生命周期管理。通过源码分析,我们可以理解其如何实现页面组件的渲染、事件处理和依赖注入。 2. **Tapestry ...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
《Tapestry 5.0:构建Web应用程序》是一份专为深入了解Tapestry 5.0框架而准备的详细指南。Tapestry是Apache软件基金会的一个开源项目,它提供了一种基于Java的声明式MVC(Model-View-Controller)框架,用于构建...
2. **Tapestry Core**:`tapestry-core-5.3.8.jar`是Tapestry框架的核心库,包含了框架的基础组件、服务和API。它提供了页面、组件、事件处理、URL映射等功能,是构建Tapestry应用的基础。 3. **Plastic**:`...
这个压缩包包含了多个以"Tapestry"开头的子文件,如 "tapestry-core", "tapestry-hibernate", "tapestry-ioc", "tapestry-upload", 和 "tapestry-spring",这些都是Tapestry框架的不同模块或插件。这些文件的后缀是...
挂毯React 将React( )与Tapestry( )一起使用。 该库提供了将Tapestry与JSX模板结合... define ( [ 't5/core/dom' , 'react' , 'react-dom' ] , function ( dom , React , ReactDOM ) { var HelloMessage = React
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...
- **tapestry-core**:Tapestry的核心库,包含了框架的主要功能和API。 - **tapestry-test**:测试支持模块,提供了针对Tapestry应用的单元测试和集成测试工具。 - **tapestry-spring**:Tapestry与Spring框架的...
8. **tapestry-hibernate-NOTICE.txt, tapestry-hibernate-core-NOTICE.txt, tapestry-ioc-NOTICE.txt**:与对应的LICENSE文件类似,这些NOTICE文件列出了在Tapestry的这些特定模块中使用到的第三方组件和它们的版权...
《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...
资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...
《Tapestry4开发指南》是由干煸四季豆编写的,旨在帮助开发者深入理解并熟练运用Tapestry4这一框架进行应用开发。Tapestry4是一个基于Java的Web应用程序框架,它强调组件化、模版驱动和声明式编程,极大地提高了开发...
### Tapestry5:构建Web应用程序 #### 一、Tapestry5概述 Tapestry5是一种先进的、基于Java的Web开发框架,它以其强大的功能、灵活性以及易用性著称。该框架由Howard Lewis Ship创建,并由Apache软件基金会维护。...
Tapestry是一个分布式系统基础设施,专门设计用于实现容错性的广域定位和路由。这个系统由Ben Y. Zhao、John Kubiatowicz和Anthony D. Joseph等人在加州大学伯克利分校的计算机科学部开发,旨在应对无处不在计算的...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型来构建动态、数据驱动的Web应用。本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用...
《深入理解 Tapestry 4.1.5:项目实例与核心库解析》 Tapestry 是一个基于 Java 的开源Web 应用程序框架,它强调组件化开发,提供了一种强大的方式来构建动态、高性能的Web 应用。在"tapestry-project-4.1.5"这个...
首先创建一个简单的页面类,继承自`tapestry-ioc:Component`,并定义一个名为`index`的页面。然后创建对应的HTML模板文件,声明页面组件和属性。 #### 3.3 运行应用 通过Maven的`jetty:run`目标启动内置的Jetty...