跳轉到內容

使用 Click 框架/控制元件進行 Java Web 應用程式開發

來自華夏公益教科書,開放的書籍,開放的世界

Click 提供了一套豐富的控制元件,支援客戶端渲染和伺服器端處理。本節涵蓋以下主題

雖然本節提供了有關控制元件工作原理的概述,但請參閱 Javadoc,其中提供了大量資訊和示例。

Control 介面

[編輯 | 編輯原始碼]

在 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() - 銷燬事件處理程式。

Control 回撥

[編輯 | 編輯原始碼]

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,您可以跳過此步驟並轉發到下一頁。

Control 類

[編輯 | 編輯原始碼]

核心控制元件類定義在包 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

Control 屬性

[編輯 | 編輯原始碼]

要自定義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=&nbsp;
 
 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進行任何字串格式化。

華夏公益教科書