`
yefeishan
  • 浏览: 109377 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

T5原理

阅读更多

Component Events

组建事件

组件事件是组件意识到用户行为的方法,就像点击链接和提交表单。

组件事件被用来两种用途:

  • 他们表现为用户在客户端浏览器中触发链接或提交表单时发起的请求。这些在页面导航page navigation和请求处理requst processing中被更全面的描述。
  • 他们表现为请求中的控制流,允许一个组件去通知他的容器关于一些详情(一个表单被提交), 或者从容器中收集一些片断数据。

经常,一个导航请求(由用户发起)将产生许多控制流请求。例如:一个表单组件将被一个动作请求触发,并且随后将在表单提交被要处理时发出一个通知事件,无论成功与否。

Tapestry4里,你可以使用方法名配置一个组件参数,当某一事件发生时该方法被调用,通常是一个客户端请求。

这有一些局限性,包括事实上仅有一个方法被调用。

Tapestry5引入了事件处理器方法概念,他通过命名约定或者OnEvent标注来确定。事件处理器方法可以拥有任何可见度,甚至是私有的(通常他们被提供包级别的可见度,以支持测试)。

你指定一个或多个方法去监听组件事件要优于配置一个组件去调用特定的方法。单独的一个事件处理器方法可以接收多个不同组件的通知事件

例如,这是页面的一部分(让我们称他为“Chooser”),用来让用户选择从110的数字。

  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”),加上附加的上下文值(s)

例: URL: http://localhost:8080/chooser.select/3.

当有附加的上下文值时,他们被追加到路径里。

这里示范一个Tapestry和传统框架动作的关键区别。这里的URL并不是说链接被点击时发生了什么,而是标识哪个组件来响应。

URL到一小段代码没有简单的映射;这里通过调用事件处理器方法的形式来替代组件发送通知。

当组件链接被用户点击的时候,一个Java方法被调用。

  1. @OnEvent(component = "select")   
  2. void valueChosen(int value)   
  3. {   
  4.    _value = value;   
  5. }  

Tapestry 在这要做两件事情:

  • 确认valueChosen()方法作为被调用的方法。
  • 将上下文值从字符串转换为整形并交给方法处理。

在上面的例子中,valueChosen()方法将被choose组件产生任何事件时调用(至少有一个上下文值)。

因为ActionLink组件仅产生单个事件类型,即"action",这不会有任何问题。

有些组件能产生多种事件类型,些时你将需要更多的细节参数:

  1. @OnEvent(value = "action", component = "select")   
  2. void valueChosen(int value)   
  3. {   
  4.    _value = value;   
  5. }  

OnEvent标注的属性值和事件名相匹配。

"action"是默认的事件类型名;ActionLink和表单组件都适用这个事件类型。如果你省略了OnEvent标注的组件部分,那么你将收到所有包含的组件通知事件,可能包括嵌套的组件(由于事件的冒泡机制)。

你可以明确限定希望接收哪个组件的事件。

 

事件处理器方法命名约定

 

作为使用标注的一种替代,你可以以指定的方式命名事件,Tapestry将会调用你的方法就像他们被标注了一样。

这种方式的命名方式是在事件控制器方法前面使用"on"前缀,跟着是动作名(首字母大写)。接下来你应该追加"From"和一个首字母大写的组件id.

前面的例子可以被重写成:

  1. void onActionFromSelect(int value)   
  2. {   
  3.    _value = value;   
  4. }  

如果事件类型命名为"onAny",它将接受所有事件类型,你很少需要此种方式!

Howard的提示:我发现我更喜欢命名约定,保留标注只是为了其他不适合的情形。

事件上下文

上下文值(ActionLink组件的context参数)可以是任何对象,然而,仅发生一个简单的字符串转换。与Tapestry 4相比,他有一个精细的类型机制有一个古怪的名字叫"DataSqueezer"

 

此外,不管你的值是什么(string, number, date),它都会被转换为无格式字符串。这将形成一个更容易读的URL

 

如果你有多个上下文值(通过将一个对象list或数组绑定到ActionLink的上下文参数),则每一个值都将按序地被追加到URL中。

当一个事件处理器方法被调用,将发生一个强制从字符串到实际类型的转换。事件处理器方法仅当上下文值的数量至少与方法参数数量一致时被调用,带有过多参数的方法将被忽略。

另外,一个事件处理方法还可以带上一个java.lang.Object[]类型的参数。这个参数会接收整个上下文数组。这是有用的,例如,这在上下文不同时间为不同长度时。我们可以使用一个个显式的参数或者单个的Object[]类型的参数。

 

访问本地信息

上面讨论了创建什么样的文件和把他们放到哪里,但没涉及到如何使用这些信息。

可以有两种方式访问信息:

  •  在组件模板中使用message:绑定前缀。
  • 通过注入组件信息对象。

在第一种方案里,你可以使用message:绑定前缀给组件参数,或使用模板表达式。

  1. <t:layout title="message:page-title">  
  2.     
  3.  ${message:greeting}, ${user.name}!   
  4.     
  5.  . . .   
  6. t:layout>  

这里,page-title的信息从消息目录中萃取而来并被交给Border组件的title参数。

另外,greeting信息被萃取和写入响应作为模板的一部分。

 “prop”照样作为默认的绑定前缀,因此,user.name是一个属性路径,不是信息key

你可以用一组属性文件扩展这些内容。

page-title=Your Account

greeting=Welcome back

或许,一个法国版是:

page-title=Votre Compte

greeting=Bienvenue en arriere

你可以注入你的组件信息目录在你的类中,当作一个Message接口的实例

  1. @Inject  
  2. private Messages _messages;  

随后你可以get()信息,或者format()它们。

  1. public String getCartSummary()        
  2. {   
  3.    if (_items.isEmpty())   
  4.      return _messages.get("no-items");   
  5.         
  6.    return _messages.format("item-summary", _items.size());   
  7. }  

Format()操作使用java.text.Formatter工作,输出你期望的漂亮的格式。

no-items=Your shopping cart is empty.    

item-summary=You have %d items in your cart.

Tapestry模板中做同样简单,但有时它更容易在Java代码中使用.

遗失key

如果你关联了一个在信息目录中没有的key值,Tapestry不会抛出异常(那样做会让刚开始开发应用非常沮丧)。当一个key值不能被定位,一个”placeholder”信息被产生,例如"[[missing key: key-not-found]]"

重载

如果你在信息目录中更改了一个属性文件,你将立刻看到改变。就像组件类和组件模板一样。

Asset(是一些web应用中用到的资源,如图象,视频等)本地化

 

一般,你的代码将用到SetupRender, BeginRender, AfterRender CleanupRender阶段,通常是这些阶段中的一个或两个。

用方法名代替标注

如果你偏爱不用标注在你的方法上,你可通过为你的方法提供特定的名字这么做。需要的方法名是首字母小写的标注名:setupRender(), beginRender(),等。同标注呈现阶段方法一样,Tapestry对于可见度,返回值和参数是灵活的。

使用这个机制,先前的例子可以被重写成

@Persist

 private int _value;

被标注的字段域将在请求之间存储他们的状态。一般来说,这意味着这个值被存储在session内。

无论何时你改变了持久化的字段域,他的值都被存储。

在稍后的请求里,这个持久化字段域的值从存储库中被重载。

 

  1. public class MyPage   
  2. {   
  3.  @ApplicationState  
  4.  
分享到:
评论

相关推荐

    T5模型,经典模型原理

    ### T5模型——自然语言处理中的经典模型原理详解 #### 一、T5模型概述 T5模型(Text-to-Text Transfer Transformer),是由Google Research在2020年提出的一种创新性的自然语言处理(NLP)模型。该模型旨在通过...

    爱威T5+ 效果器 调试软件

    同时,理解音频处理的基本原理,比如频率响应、动态范围和相位关系等,也能帮助用户做出更为专业的调音决策。 总的来说,爱威T5+ 效果器调试软件是专业人士优化音频质量的重要工具,通过它,用户可以深度挖掘T5+的...

    STC89C52单片机与T5UIC1屏的应用_迪文_迪文_tuic1_

    在本应用中,它被用来驱动迪文(Dimen)的T5UIC1液晶显示屏,该屏幕型号为DMT48270C043-04WR,具备显示汉字、英文和数字的能力,同时支持图形化操作如画线和绘制矩形。 迪文T5UIC1屏是迪文科技推出的一款智能显示...

    T5L典型应用原理图.pdf

    由于提供的文件信息是不完整和可能有OCR扫描错误的,我们无法得到一个完整的T5L典型应用原理图的详细内容,但是我们仍然可以根据标题、描述和可见的文字片段来推测这个原理图可能包含的知识点。 首先,“迪文屏幕T5...

    迪文T5L ASIC开发20191122.zip

    对于初次接触迪文T5L的开发者来说,建议首先阅读用户手册,理解芯片的基本功能和工作原理;然后,根据开发板资料搭建实验环境,尝试运行示例代码;最后,结合应用笔记和问题解答逐步完善自己的项目。在开发过程中,...

    T5L DGUSII 应用开发指南20210510.pdf

    * T5L_DGUS II 开发体系简介:介绍 T5L_DGUS II 开发体系的架构和组成,帮助开发者了解整个开发系统的结构和工作原理。 重要概念 * 型号命名规则:T5L DGUSII 的型号命名规则是指设备型号的组成和命名方式,包括...

    T5 CPU智能屏开发指南.rar

    迪文科技的T5 CPU智能屏是一款集成了高性能处理器和丰富显示功能的电子产品,主要应用于各种需要实时数据展示和交互的场景。这份“T5 CPU智能屏开发指南”是为开发者提供的一份详尽的参考资料,旨在帮助初学者快速...

    NTC T5.rarNTC T5.rarNTC T5.rar

    NTC T5是一种常见的电子元件,它代表负温度系数热敏电阻...总的来说,NTC T5是一个在众多电子设备中发挥着重要作用的组件,了解其工作原理、特性和应用有助于我们更好地利用这种热敏电阻,解决各种温度相关的问题。

    ASP.NET T5.rar

    这个压缩包内的文件可能是ASP.NET T5的实例代码、示例项目、配置文件、文档资料等,通过研究这些内容,开发者可以深入理解ASP.NET T5的工作原理,掌握其核心特性和最佳实践。无论是初学者还是经验丰富的开发者,都...

    GPT背后原理详解:从T5到GPT-4,国内20余位顶级大牛联合撰写

    《GPT背后原理详解:从T5到GPT-4》是深度学习领域的一部重要作品,由国内二十多位顶尖专家联手创作,旨在全面解析GPT系列模型的理论基础、技术演进及其在人工智能领域的应用。本文将深入探讨这一主题,帮助读者理解...

    t5-源码.rar

    《T5 源码解析:深度学习中的预训练模型新里程碑》 T5,全称为Text-to-Text...通过研究源代码,开发者不仅能掌握T5模型的工作原理,还能学习到如何在实际项目中应用和微调模型,为自己的NLP研究和开发带来灵感和指导。

    点亮夏普屏LA7605-LQ070T5BG01的线路图

    通过细致分析各个元件及其连接方式,可以深入了解显示屏的工作原理与性能表现。 #### 元件解析 1. **电源电路**:如C201(100u)、C202(103)等电容与R201(27K)、R203(47K)等电阻组成的滤波与稳压电路,确保了显示屏...

    AJAX T5.rarAJAX T5.rarAJAX T5.rar

    T5可能是指一种基于AJAX技术的特定项目、框架或者版本。由于提供的信息重复且不详尽,我将就AJAX的基本概念、工作原理以及相关应用进行深入阐述。 **一、AJAX基本概念** AJAX的核心是通过XMLHttpRequest对象与...

    t5_forexindicator_indicator_源码

    通过分析源码,交易者不仅可以理解其工作原理,还能根据自身需求对其进行修改和优化,以提高交易决策的准确性和效率。同时,这个工具的设计和使用离不开MetaTrader平台的支持,它体现了自动化交易和个性化策略在现代...

    t5yu.rar_

    源码通常用于理解软件的工作原理,调试错误,或者进行二次开发。 【文件名称】:t5yu.docx:这是压缩包内唯一列出的文件,一个Microsoft Word文档。很可能文档中详尽地介绍了t5yu网络的各个方面,包括其设计、实现...

    基于T5L1的小型PLC设计方案程序文件

    由于没有具体的文件内容,我们无法详细解读,但可以推测这将是理解整个系统工作原理的关键。 综上所述,基于T5L1的小型PLC设计方案涉及了嵌入式系统设计、实时操作系统、图形用户界面开发和串口通信等多个领域的...

    stm32f103c8t5

    - 电路图是理解STM32F103C8T6系统板工作原理的关键,它展示了各个组件的连接方式和信号流路径。 - 包含电源管理、晶振电路、复位电路、调试接口(如SWD或JTAG)、GPIO扩展、时钟系统、外设接口等部分。 3. **管脚...

    简析定压功放电路原理图

    放大后的音频信号会分别送到T5和T19的基极,进而经过由T5、T6和T9、T8组成的进一步放大电路,并送入T11和T12的基极。 T11、T14和T12、T15组成的两个次达林顿管驱动了由四对A1943/C5200音响功率对管并联组成的功率...

    网络隔离器电路原理图

    T3与T4、T5与T6则分别用于连接非本安输入部分与本安输出部分之间的屏蔽线。 - **C1**: 电容,用于滤波和噪声抑制。 - **R9~R16**: 电阻网络,与变压器一起形成信号传输路径,并且通过调整这些电阻的值可以调节信号的...

Global site tag (gtag.js) - Google Analytics