使用 Click 框架/控制元件進行 Java Web 應用程式開發
Click 提供了一套豐富的控制元件,支援客戶端渲染和伺服器端處理。本節涵蓋以下主題
雖然本節提供了有關控制元件工作原理的概述,但請參閱 Javadoc,其中提供了大量資訊和示例。
在 Click 中,控制元件提供處理使用者輸入的伺服器端元件,並將它們的顯示渲染給使用者。控制元件相當於 Visual Basic 控制元件或 Delphi 元件。
控制元件使用 onProcess 方法處理使用者輸入,並使用 toString() 方法渲染它們的 HTML 顯示。下圖 1 說明了 Control 被處理和渲染的執行順序。
圖 1. 後續序列圖 - 由 Enterprise Architect 建立,由 Sparx Systems 提供
在 Click 中,所有控制元件類都必須實現 Control 介面。下圖 2 說明了 Control 介面。
圖 2. Control 介面圖 - 由 Enterprise Architect 建立,由 Sparx Systems 提供
Control 介面上的方法包括
- getContext() - 提供對請求上下文的訪問。
- getHtmlImports() - 定義控制元件的 HTML 標頭匯入。
- getId() - 定義控制元件的 HTML id 屬性。
- setListener() - 設定控制元件的操作回撥偵聽器。
- getMessages() - 定義控制元件的本地化訊息對映。
- getName() / setName() - 定義控制元件在頁面模型或表單欄位中的名稱。
- getParent() / setParent() - 定義控制元件的父級。
- onDeploy() - 在啟動時部署資源。
- onInit() - 初始化事件處理程式。
- onProcess() - 處理請求事件處理程式。
- onDestroy() - 銷燬事件處理程式。
Click 控制元件提供類似於 java.awt.ActionListener 回撥的事件回撥機制。
要定義控制元件偵聽器,只需設定偵聽器物件例項和要呼叫的偵聽器方法的名稱。例如
public class SimpleCallback extends Page
{
public SimpleCallback()
{
ActionLink clickLink = new ActionLink("clickLink");
clickLink.setListener(this, "onClick");
addControl(clickLink);
}
public boolean onClick()
{
System.out.println("onClick invoked");
return true;
}
}
偵聽器方法可以具有任何名稱,但它必須不接受引數並且必須返回布林值或 java.lang.Boolean 值。
當回撥方法返回 true 時,其他 Control 的處理將繼續,並且將呼叫 Pages 的 onGet() 或 onPost() 事件處理程式。如果控制元件返回 false,則不會執行進一步的 Control 處理,並且不會呼叫 Page 的 onGet() 或 onPost() 方法。
能夠停止進一步的處理並執行其他操作非常方便。例如,您的 Pages onGet() 或 onPost() 方法可能執行昂貴的資料庫操作。透過在事件處理程式中返回 false,您可以跳過此步驟並轉發到下一頁。
核心控制元件類定義在包 net.sf.click.control 中。此包包含用於基本 HTML 元素的控制元件。
擴充套件控制元件類在 Click Extras 包 net.sf.click.extras.control 中提供。Click Extras 類可能包含對第三方框架的依賴項。
下圖 3 說明了這些控制元件類的一部分。
圖 3. 包類圖 - 由 Enterprise Architect 建立,由 Sparx Systems 提供
關鍵控制元件類包括
- ActionLink - 提供一個錨鏈接,可以呼叫回撥偵聽器。
- Field - 提供抽象表單欄位控制元件。
- Form - 提供用於處理、驗證和渲染的表單控制元件。
- Submit - 提供一個 input 型別為 submit 的控制元件,可以呼叫回撥偵聽器。
- TextField - 提供一個 input 型別為 text 的控制元件,可以呼叫回撥偵聽器。
控制元件類旨在支援子類化以實現自定義行為。所有控制元件欄位的可見性都為 protected,並且具有公共訪問器方法。
您還可以聚合控制元件以構建更復雜的控制元件。例如,CreditCardField 使用 Select 控制元件來渲染不同的信用卡型別。
用於欄位驗證訊息和 HTML 格式化字串的 Control 字串在屬性檔案中外部化。透過使用這些屬性檔案,您可以將 Click 應用程式本地化為您的特定語言和方言。
訊息按特定順序查詢,使您可以為您的控制元件、各個頁面或整個應用程式定製特定訊息。本地化訊息解析的順序如下
- 頁面範圍訊息
- 訊息查詢首先解析為 Page 類的訊息包(如果存在)。例如,登入頁面可能定義訊息屬性
- /com/mycorp/page/Login.properties
- 如果您想為特定頁面定製訊息,這裡就是放置它們的地方。
- 全域性頁面範圍訊息
- 接下來,訊息查詢解析為全域性頁面訊息包(如果存在)。
- /click-page.properties
- 如果您希望訊息在整個應用程式中使用,這裡就是放置它們的地方。
- Control 範圍訊息
- 接下來,訊息查詢解析為 Control 類訊息包(如果存在)。例如,CustomTextField控制元件可能定義訊息屬性
- /com/mycorp/control/CustomTextField.properties
- 全域性 Control 範圍訊息
- 最後,訊息查詢解析為全域性應用程式 Control 訊息包(如果訊息尚未找到)。全域性 Control 屬性檔案是
- /click-control.properties
要自定義click-control.properties只需將此檔案新增到您的類路徑並調整特定值即可。
請注意,在自定義訊息屬性時,您必須包含所有屬性,而不僅僅是您要覆蓋的屬性。
# Click Control messages
field-maxlength-error={0} must be no longer than {1} characers
field-minlength-error={0} must be at least {1} characters
field-required-error=You must enter a value for {0}
file-required-error=You must enter a filename for {0}
label-required-prefix=
label-required-suffix=<span class="required">*</span>
label-not-required-prefix=
label-not-required-suffix=
not-checked-error=You must select {0}
number-maxvalue-error={0} must not be larger than {1}
number-minvalue-error={0} must not be smaller than {1}
select-error=You must select a value for {0}
table-first-label=First
table-first-title=Go to first page
table-previous-label=Prev
table-previous-title=Go to previous page
table-next-label=Next
table-next-title=Go to next page
table-last-label=Last
table-last-title=Go to last page
table-goto-title=Go to page
table-page-banner=<span class="pagebanner">{0} items found, displaying {1} to {2}.</span>
table-page-banner-nolinks=
<span class="pagebanner-nolinks">{0} items found, displaying {1} to {2}.</span>
table-page-links=<span class="pagelinks">[{0}/{1}] {2} [{3}/{4}]</span>
table-page-links-nobanner=<span class="pagelinks-nobanner">[{0}/{1}] {2} [{3}/{4}]</span>
# Message displayed when a error occurs when the application is in "production" mode
production-error-message=<div id='errorReport' class='errorReport'>The application encountered an unexpected error. </div>
Field 類支援資源包的層次結構,用於顯示驗證錯誤訊息和顯示訊息。可以透過 Field 方法訪問這些本地化訊息
- getMessage(String)
- getMessage(String, Object)
- getMessage(String, Object[])
- getMessages()
- setErrorMessage(String)
- setErrorMessage(String, Object)
這些方法使用Locale請求的,以查詢字串資源包,並使用MessageFormat進行任何字串格式化。


