成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Tapestry 5組件事件詳解

開發(fā) 后端
Tepestry 5的組件事件引入了通過命名約定,改進了Tepestry 4中的方法名配置參數(shù)的方式,本文向您詳細介紹Tepestry 5的組件事件。

組件事件
 
組件事件是指組件所察覺到的用戶的行為,如點擊鏈接或提交表單。
 
組件主要用于兩種用途:

◆它們呈現(xiàn)了用戶在客戶端瀏覽器中觸發(fā)鏈接或表單發(fā)起的請求。這些在頁面導航(page navigation)和請求處理(requst processing)中有更全面的描述。

◆它們描繪了一個請求中的控制流即允許一個組件通知它的容器一些情境(一個表單被提交),或者從容器中收集一些片斷數(shù)據(jù)。

通常,一個導航請求(由用戶發(fā)起)將產(chǎn)生許多控制流請求。如,表單組件被將一個動作請求觸發(fā),然后發(fā)送通知事件聲稱表單提交事件將被處理,隨后不管成功與否。
 
Tapestry 4中,你可以用一個方法名來配置組件的一個參數(shù),當某一特定事件發(fā)生時(通常來自客戶端的請求)該方法將被調(diào)用。如:

﹤form jwcid=”@Form” listener=”listener:someMethodName”﹥ 

這有一些局限性,包括事實上僅有一個方法被調(diào)用。
 
Tapestry 5組件事件引入了通過命名約定或者OnEvent annotation來標識的事件處理方法(event handler methods)。事件處理方法可以有任何的可見性,甚至私有的(通常它們是包可見性的,用以支持測試)。
 
同比于Tapestry 5組件事件配置一個被調(diào)用的特定的方法,你可以標識一個或多個方法來監(jiān)聽組件事件。單獨的一個事件處理方法可以接收許多不同組件的通知事件,如在事件處理方法上加上@OnEvent(component={"component1", "component2"})。
 
比如,這里是一個讓用戶選擇1到10數(shù)字的頁面片斷(就叫"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組件創(chuàng)建一個動作URL。
 
URL標識了頁面包含的組件("chooser"),事件的類型(除非不是默認且很通常的"action"事件類型),頁面里組件的id("select")還有附加的上下文(context)值。
 
一個URL示例:http://localhost:8080/chooser.select/3.
 
當存在附加的上下文值時,它們被追加到路徑中。
 
這里示范了Tapestry與傳統(tǒng)方式URL的關鍵區(qū)別,它是一個面向動作的框架。這里的URL并不是說鏈接被點擊時發(fā)生了什么,而是標識哪個組件來響應。
 
沒有從URL到一段代碼的簡單映射;這里通過調(diào)用事件處理方法的形式來替代Tapestry 5組件事件發(fā)送通知事件。當組件生成的鏈接被用戶點擊時,一個Java方法將會被調(diào)用。

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

Tapestry在此做了兩件事:

◆確認valueChosen()方法作為調(diào)用的方法。

◆將上下文值從字符串轉(zhuǎn)換為整數(shù)并傳送給事件處理方法。

在上面的實例中,valueChosen()方法將在choose組件產(chǎn)生任何事件時被調(diào)用(至少有一個上下文值)。因為ActionLink組件僅產(chǎn)生單個事件類型,即"action",這不會帶來任何問題(OnEvent可以配置事件類型)。
 
某些組件能產(chǎn)生多種事件,些時你需要更多的細節(jié)參數(shù):

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

OnEvent annotation的value屬性用來匹配事件名。

"action"是默認的事件類型名,ActionLink 和 Form組件都使用這個事件類型。如果你省略了OnEvent annotation的component參數(shù),它就是收到所有包含組件的通知事件,可能包括內(nèi)嵌組件(因為事件冒泡機制event bubbling)。
你可以限定接收哪個或哪些組件的事件。
 
事件處理方法命名約定
 
作為使用annotations的一種替代,我們可以以指定的方式命名事件,Tapestry 5組件事件將會調(diào)用你的方法,就好像方法被聲明了annotation一樣。
 
這種事件處理方法的命名方式以前綴"on"開頭,緊跟著動作的名字(首字母大寫capitalized),然后加上"From" 和一個首字母大寫的組件id。
先前的例子可以寫成:

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

如果事件類型命名為"onAny",它將接受所有事件類型,我們很少需要此種方式!
如果出于某些難解的原因我們需要以同一方法接收不同組件的相同事件,我們就需要OnEvent annotation。
 
來自Howard的提示:我發(fā)現(xiàn)我更喜歡命名約定方式,保留annotation只是為了其他不適合的情況。
 
事件上下文(Event Context)
 
上下文值(ActionLink組件的context參數(shù))可以是任何對象,然而,僅發(fā)生一個簡單的字符串轉(zhuǎn)換。與Tapestry 4相比,他有一個精細的類型機制,怪名叫"DataSqueezer"。
 
此外,不管是什么值(string, number, date),它都會被轉(zhuǎn)換為文本字符串。這將形成一個更可讀的URL。
 
如果帶有多個上下文值(通過將一個對象list或數(shù)組綁定到ActionLink的context參數(shù)),則每一個值都將有序地追加到URL中。
 
當一個Tapestry 5組件事件事件處理方法被調(diào)用時,將發(fā)生一個強制(coercion)從字符串到實際類型的轉(zhuǎn)換。事件處理方法僅當上下文值的數(shù)量至少與方法參數(shù)數(shù)量一致時被調(diào)用,帶有過多參數(shù)的方法將被跳過。
 
另外,一個事件處理方法還可以帶上一個java.lang.Object[]類型的參數(shù)。這個參數(shù)會接收整個上下文數(shù)組。這在上下文不同時間為不同長度時有用處。我們可以使用一個個顯式的參數(shù)或者單個的Object[]類型的參數(shù)。
 
事件冒泡(Event Bubbling)
 
事件會冒泡向上傳遞到層級,直到它被終止。事件在事件處理方法返回一個非null值時終止。對于頁面導航事件,事件處理方法的返回決定了Tapestry將如何呈現(xiàn)響應。

 

【編輯推薦】

  1. Tapestry5的性能改進淺析
  2. Tapestry5新特性詳解
  3. JSF和Tapestry全面比較
  4. 初探下一代Web開發(fā)模式Tapestry
  5. 表現(xiàn)層框架Struts/Tapestry/JSF比較
責任編輯:佚名 來源: JavaEye
相關推薦

2009-06-29 17:42:03

Tapestry5新特

2009-06-29 18:04:13

Tapestry5

2009-07-03 14:41:29

2009-07-14 14:16:03

Tapestry 5.Tapestry教程Tapestry頁面

2009-06-22 14:22:41

JSF和Tapestr

2024-12-16 17:59:55

2009-07-03 16:33:13

Tapestry函數(shù)執(zhí)

2009-06-24 16:16:30

JSF和Tapestr

2009-05-13 10:02:37

Tapestry 5.servletApache

2020-04-02 20:26:22

線程組插件開發(fā)

2010-01-08 18:26:34

VB.NET網(wǎng)頁控件事

2009-06-23 14:01:27

StrutsTapestryJSF

2009-07-03 17:09:01

學習Tapestry

2021-12-10 10:29:17

勒索軟件惡意軟件安全

2011-07-21 13:04:01

組策略GPOAD

2015-11-06 13:59:01

JavaScript事件處理

2009-07-14 14:08:35

Tapestry 5.web.xml的配置

2011-12-27 09:25:29

ApacheJava

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2013-08-28 17:54:48

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本一区二区影视 | 久久噜噜噜精品国产亚洲综合 | 久久狼人天堂 | 91极品欧美视频 | 精品欧美一区二区精品久久 | 成人在线免费观看视频 | 国产成人精品一区二区 | 中文字幕av在线一二三区 | 亚洲国产视频一区二区 | 精品国产乱码久久久久久闺蜜 | 亚洲精品成人网 | 91看国产 | 欧美精品一区二区免费视频 | 一级黄色录像片子 | 欧美福利 | 一区二区三区国产精品 | 精品国产乱码久久久久久闺蜜 | 在线国产欧美 | 在线成人精品视频 | 毛片免费看 | 国产成人99久久亚洲综合精品 | 日韩精品一区二区三区在线 | 成人一区二区视频 | 亚洲福利在线视频 | 啪啪免费 | 国产三区视频在线观看 | 成人一级黄色毛片 | 久久精品国产精品青草 | 亚洲国产精品一区二区第一页 | 日本精品视频在线观看 | 中国一级特黄真人毛片 | 日本精品视频 | 欧美日韩精品 | 亚洲一区在线播放 | 国产一区2区 | 久久91av | 精品一区在线 | 亚洲福利电影网 | 日韩欧美二区 | 国产中文视频 | 中文字幕日韩欧美一区二区三区 |