Tapestry 5组件事件
本人随后时间将忙于单点登录研究,翻译Tapestry 5的时间不多,稍后章节翻译将会较慢,还望各位继续支持!
组件事件
组件事件是指组件所察觉到的用户的行为,如点击链接或提交表单。
组件主要用于两种用途:
通常,一个导航请求(由用户发起)将产生许多控制流请求。如,表单组件被将一个动作请求触发,然后发送通知事件声称表单提交事件将被处理,随后不管成功与否。
Tapestry 4
中,你可以用一个方法名来配置组件的一个参数,当某一特定事件发生时(通常来自客户端的请求)该方法将被调用。如:
- <form jwcid=”@Form” listener=”listener:someMethodName”>
这有一些局限性,包括事实上仅有一个方法被调用。
Tapestry 5
引入了通过命名约定或者OnEvent annotation来标识的事件处理方法(event handler methods)。事件处理方法可以有任何的可见性,甚至私有的(通常它们是包可见性的,用以支持测试)。
同比于配置组件一个被调用的特定的方法,你可以标识一个或多个方法来监听组件事件。单独的一个事件处理方法可以接收许多不同组件的通知事件,如在事件处理方法上加上@OnEvent(component={"component1", "component2"})。
比如,这里是一个让用户选择1到10数字的页面片断(就叫"chooser"):
- <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")还有附加的上下文(context)值。
当存在附加的上下文值时,它们被追加到路径中。
这里示范了Tapestry与传统方式URL的关键区别,它是一个面向动作的框架。这里的URL并不是说链接被点击时发生了什么,而是标识哪个组件来响应。
没有从URL到一段代码的简单映射;这里通过调用事件处理方法的形式来替代组件发送通知事件。
当组件生成的链接被用户点击时,一个Java方法将会被调用。
- @OnEvent(component = "select")
- void valueChosen(int value)
- {
- _value = value;
- }
Tapestry在此做了两件事:
- 确认valueChosen()方法作为调用的方法。
- 将上下文值从字符串转换为整数并传送给事件处理方法。
在上面的实例中,valueChosen()方法将在choose组件产生任何事件时被调用(至少有一个上下文值)。因为ActionLink组件仅产生单个事件类型,即"action",这不会带来任何问题(OnEvent可以配置事件类型)。
某些组件能产生多种事件,些时你需要更多的细节参数:
- @OnEvent(value = "action", component = "select")
- void valueChosen(int value)
- {
- _value = value;
- }
OnEvent annotation的value属性用来匹配事件名。
"action"是默认的事件类型名,ActionLink 和 Form组件都使用这个事件类型。如果你省略了OnEvent annotation的component参数,它就是收到所有包含组件的通知事件,可能包括内嵌组件(因为事件冒泡机制event bubbling)。
你可以限定接收哪个或哪些组件的事件。
事件处理方法命名约定
作为使用annotations的一种替代,我们可以以指定的方式命名事件,Tapestry将会调用你的方法,就好像方法被声明了annotation一样。
这种事件处理方法的命名方式以前缀"on"开头,紧跟着动作的名字(首字母大写capitalized),然后加上"From" 和一个首字母大写的组件id。
先前的例子可以写成:
- void onActionFromSelect(int value)
- {
- _value = value;
- }
如果事件类型命名为"onAny",它将接受所有事件类型,我们很少需要此种方式!
如果出于某些难解的原因我们需要以同一方法接收不同组件的相同事件,我们就需要OnEvent annotation。
来自Howard的提示:我发现我更喜欢命名约定方式,保留annotation只是为了其他不适合的情况。
事件上下文(Event Context)
上下文值(ActionLink组件的context参数)可以是任何对象,然而,仅发生一个简单的字符串转换。与Tapestry 4相比,他有一个精细的类型机制,怪名叫"DataSqueezer"。
此外,不管是什么值(string, number, date),它都会被转换为文本字符串。这将形成一个更可读的URL。
如果带有多个上下文值(通过将一个对象list或数组绑定到ActionLink的context参数),则每一个值都将有序地追加到URL中。
当一个事件处理方法被调用时,将发生一个强制(coercion)从字符串到实际类型的转换。事件处理方法仅当上下文值的数量至少与方法参数数量一致时被调用,带有过多参数的方法将被跳过。
另外,一个事件处理方法还可以带上一个java.lang.Object[]类型的参数。这个参数会接收整个上下文数组。这在上下文不同时间为不同长度时有用处。我们可以使用一个个显式的参数或者单个的Object[]类型的参数。
事件冒泡(Event Bubbling)
事件会冒泡向上传递到层级,直到它被终止。事件在事件处理方法返回一个非null值时终止。
对于页面导航事件,事件处理方法的返回决定了Tapestry将如何呈现响应。
分享到:
- 2007-04-01 00:09
- 浏览 7883
- 评论(9)
- 论坛回复 / 浏览 (8 / 8804)
- 查看更多
相关推荐
这个过程需要对 Tapestry 5 的组件模型有深入理解,包括生命周期、事件处理、依赖注入等概念。通过这样的自定义组件,开发者可以轻松构建复杂的功能,如邮件发送,同时保持代码的清晰和模块化。
在`GridPanel.java`中,会定义Tapestry组件的Java类,包括属性、方法和事件处理逻辑。 3. **配置模板**:编写对应的HTML/TML模板文件,如`GridPanel.tml`,在这个模板中,可以通过Tapestry的标记语言来创建...
介绍Tapestry组件的使用和功能。内容还行,使用初学者入门。
- **Tapestry 5 框架的核心理念**:理解 Tapestry 5 如何通过组件化设计实现代码重用和模块化。 - **组件模型**:深入探讨 Tapestry 5 中的组件模型,包括如何定义和使用组件。 - **页面生命周期**:了解 Tapestry 5...
本书首先会介绍Tapestry 5的基本概念,包括组件模型、事件处理和页面生命周期。组件是Tapestry 5的核心,它们是可重用的、自包含的代码块,可以是简单的HTML元素或者复杂的用户交互逻辑。读者将学习如何创建和定制...
- **事件传播**:Tapestry 5支持事件系统,允许组件间通信。事件可以在组件内部触发,也可以在父组件和子组件之间传递。 - **命令对象**:命令对象用于封装用户交互,如按钮点击,这些操作可以触发一系列业务逻辑...
Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证、本地化、状态管理和URL映射等功能。Tapestry 5 强调易用性,不仅对终端用户友好,...
在Tapestry中,这些组件不仅可以方便地呈现和管理用户输入,还可以配合各种事件处理程序,如onChange、onSubmit等,实现复杂的业务逻辑。同时,Tapestry的类型安全机制确保了服务器接收到的数据是经过验证的,减少了...
Apache Tapestry 5 是一个基于Java的开源Web应用程序框架,其设计目标是提供一个面向组件的开发环境,简化Web应用的构建。这个框架的核心特点包括输入验证、本地化/国际化、状态管理和URL处理等,旨在提高用户体验和...
Apache Tapestry 5 是一个基于Java的Web应用开发框架,其核心理念是组件化开发,通过构建组件来创建页面。Tapestry 5 提供了一系列的功能,包括输入验证、本地化/国际化、状态管理和URL映射,使得开发者能更高效地...
- **组件驱动的开发模型**:Tapestry 5采用组件化的开发方式,每个页面或页面的一部分都可以作为一个独立的组件进行开发,这极大地提高了代码的复用性和维护性。 - **内置的Ajax支持**:Tapestry 5内置了对Ajax的...
tapestry部分组件绑定参数的列表!
### 关于Tapestry 5的关键知识点 #### 1. 什么是Tapestry? Tapestry是一个开源框架,用于创建动态、稳健且高度可扩展的Java Web应用程序。它补充并建立在标准Java Servlet API之上,因此可以在任何Servlet容器或...
1. **组件化编程**:Tapestry 5 强调基于组件的开发模式,每个组件都是一个可重用的 UI 单元,这使得代码更易于管理和维护。 2. **自动表单处理**:Tapestry 5 自动管理表单提交过程中的数据绑定和验证,极大地简化...
接下来,我们转向"tapestry组件.docx",组件是Tapestry的核心组成部分,它们是可重用的、自包含的代码单元,可以处理用户交互、展示数据或执行业务逻辑。组件可以是简单的HTML元素,也可以是复杂的UI部件。组件的...
6. **模板语言**:Tapestry 5使用一种基于HTML的模板语言,允许在HTML中嵌入组件和事件处理。这种语言既保留了HTML的语义,又提供了与Java的紧密集成。 7. **国际化和本地化**:Tapestry 5支持多语言环境,通过资源...
总的来说,Tapestry 4是一个强大且灵活的Web开发框架,通过其组件化、声明式编程和事件驱动的特性,能有效提高开发效率,同时保持代码的整洁和可维护性。对于想要深入Java Web开发的开发者来说,掌握Tapestry的知识...
这本书详细介绍了Tapestry 5的核心概念和技术,包括组件模型、页面生命周期、事件处理、表单处理、国际化、性能优化、测试以及与其他技术(如Spring、Hibernate)的集成等。通过阅读此书,读者能够深入理解Tapestry ...