天天看點

Tapestry學習十四:關于元件(九)Select元件

  在 web 應用中下拉選擇菜單是必不可少的東西。在 Tapestry 中是用 select 元件實作的。而且 select 元件能很好的和 emun 相結合,避免在頁面中寫死那些選項。  

我們在注冊頁面上價格選擇框,讓使用者選擇他的國家:

Tapestry學習十四:關于元件(九)Select元件

按慣例還是先看代碼:   <tr> <td>Country:</td> <td> <select t:type="select"  t:model="countries" t:value="country"> <option>Country 1</option> <option>Country 2</option> </select> </td> </tr>   可以看到 select 元件是隐藏在 HTML 控件中的,如果你不想那麼寫可以以: <t:select t:model=”contris” t:value=”country”/> 這個元件有兩個參數: model 和 value 。 Value 屬性是和以前的元件一樣,都是 class 中的屬性。 Model 參數提供顯示在下拉清單中的資料。這個參數從 page class 中接受一個實作了 SelectModel 接口的類。提供 SelectModel 類的實作有幾種方式,這取決與我們想要多靈活和強大。這裡我們隻考慮簡單的,複雜的會在最後讨論。 首先我們要建立一個 enum 類:   package com.packtpub.celebrities.model; public enum Country { GERMANY , UK, USA }   這裡隻寫了幾個,你想要以後可以自己添加。看看類中的代碼:   @Inject private Messages messages; public SelectModel getCountries() { return new EnumSelectModel(Country.class, messages); } @Persist private Country country; public Country getCountry() { return country; } public void setCountry(Country country) { this.country = country; }   我們執行個體化了一個 EnumSelectModel 類,這個類實作了一個 SelectModel 接口, EnumSelectModel 構造器有兩個參數,一個是在下拉框中顯示的資料,還有一個被我們注入的是有點神秘兮兮的 message 。這個 message 是什麼?   這個話題和以後要說道的國際化就很接近了。每一個 Tapestry 應用都能有一些資源檔案,這些資源檔案可以被應用群組件使用,它是一個 .properties 的檔案,放在 web-inf 檔案夾下。它們是以鍵值對的方式存在的。   當這個 message 被注入到頁面,這個對象就從資源檔案中提供了很多可用的鍵值對給頁面使用。我們需要提供一個這樣的檔案給他。 但是這個資源檔案的名字可不是随便定義的,它的名字是對應這 web.xml 中 tapestry filter 的名字。 <filter> <filter-name>app</filter-name> <filter-class>org.apache.tapestry.TapestryFilter </filter-class> </filter> 是以我們要建立一個叫 app.properties 的檔案: Country.Germany=Germany country.UK=United Kingdom COUNTRY.USA=United States 廢話不多說了,自己看看效果吧。

繼續閱讀