在 IBM Rational Application Developer V7.5 中創建自定義 Java

火星人 @ 2014-03-12 , reply:0
←手機掃碼閱讀

  

JSF 組件:它們是什麼以及誰需要它們

JSF 框架的優勢之一是它基於組件的構架。組件是使用 JSF 技術構建任何 Web 應用軟體的構建板塊:它們會實現下面所有任務:

  • 在客戶端中控制 UI 實現
  • 將 UI 窗口小部件的綁定控制在後台數據中
  • 回發到這台伺服器過程中對如何請求要處理的參數進行控制
  • 控制如何提交轉換以及確認有效的值
  • 取消對於用戶行為做出回應的事件
  • 等等

JSF 的規範以及它的實現提供了大量您(作為一個應用軟體開發者)可以立即使用的基礎組件:若干輸入組件(比如 inputText),若干輸出組件(比如 outputText),一個數據表格,一對布局面板(比如 panelGrid),一個按鈕,一個鏈接,以及圖像。

使用核心 JSF 實現所提供的這些組件構建一個功能性的 Web 應用軟體是可能的。然而, 對於這個組件設置卻有一定的限制。當您設計最新 Web 應用軟體時,您要盡量為您的用戶提供豐富的經驗,而且這些經驗與 JSF 規範相比提供了更多複雜的組件。您需要的組件有這些,比如菜單,豐富的文本編輯器,文件上載,以及日曆:這些正是用戶所期望的功能。

值得慶幸的是,JSF 構架非常靈活,並且除了 JSF 應用軟體所提供的那些之外,它還允許您創建您自己的組件。因此,開發者創建了 JSF 組件庫來滿足其它應用軟體開發者的需求。在當今市場上已經有幾種重要且普遍使用的組件庫,包括以下這些:

  • IBM JSF Widget Library (JWL)
  • MyFaces’ Tomahawk
  • Trinidad 和 Tobago
  • JBOSS 的 RichFaces
  • ICEFaces
  • 等等

然而,雖然這些組件庫十分龐大,卻沒有一個能滿足所有開發人員需求的組件庫。您可能需要一個在您選擇組件庫中沒有的特殊 JSF 組件。

如果是這樣的話,您可能要自己反思反思,“我應該自己來構建這個組件嗎?”

很多情況下,答案是“是的”。構建一個自定義 JSF 組件通常是正需要做的事情。一個自定義組件可以讓您在一個 JSF 標籤中容納許多功能。那麼您就可以在許多頁面和應用軟體中重新使用這個標籤,並可以在您的組織中與其他開發人員共享。它還簡化了維護工作,因為這個功能保存在一個位置,而不是散布在您組織中的許多頁面中。

例如,假想您的應用軟體需要搜集關於一個用戶地址的信息。您很可能需要不止一次的操作:您可能對其他用戶的家庭地址,辦公地址,運輸地址,以及上演地址感興趣。您會查看所有的常見組件庫,但是沒有一個擁有處理地址的組件。因此您就要使用標準的 JSF 組件,並從各種輸入和輸出域中快速構建一個地址(圖 1)。


圖 1. 地址組

因為您不止一個頁面上需要這樣的地址組,您要在各個頁面上重複操作,還有可能在不同的應用軟體上重複此操作。您的頁面都能夠正常地運作嗎?是的。是不是有大量類似的編碼被重複了一次又一次呢?的確是這樣。這難道就是維護的噩夢嗎?完全正確。如果一周后您需要重新排列這些域或者添加其它國家的域怎麼辦?您需要在創建這個地址組的每個頁面進行變更!

如果用您自己創建的包含這個組的組件來替代,然後使用單個的標籤,比如很普遍的 <my:inputAddress value="#{address}" /> 就會容易多了。您的 JSP 源代碼應給更精悍更清晰,如果您曾需要變更這個地址組,您就只需要在一個位置進行變更。您還可以與您的同事或者在線社區共享您的 inputAddress 組件,這樣每個需要這樣組件的人都可以從您的工作中獲益。

到目前為止可以很清楚地看到,創建一個自定義組件是一件有益的事情,但是最佳創建方法是什麼呢?雖然 JSF 規範可以創建新的組件,但是它不能使其簡化。如果您想創建一個組件,您需要創建三個 Java 類:

  • 一個組件類
  • 一個呈遞類
  • 一個標籤處理函數類。

除了那些類,還應該在 faces-config.xml 文件以及 標籤庫 文件中提供關於這個新組件的信息。這是一項乏味且容易出錯的工作。

這就是為什麼 Rational Application Developer V7.5 要有一個能夠幫助 JSF 開發人員快速且簡便地創建自定義組件的新特徵。作為一名組件創造者,您可以使用熟悉的 Rational Application Developer 工具(比如從面板中拖放,WYSIWYG 編輯器, Properties, 以及 PageData 視圖),並且 Rational Application Developer 能夠自動為您創建所有所需的 Java 類和配置文件。

當然,如果您是一名高級用戶,您仍然可以自己調節生成的 Java 類來實現更大的動力和靈活性。然而,您不需要了解內部 JSF 構架的用來在 Rational Application Developer 中創建組件的相關知識。

要論證這個新特徵,您要為每個常用案例,比如附有標籤的輸入域,來創建一個簡單的自定義 JSF 組件,如列表 1所示。


列表 1. 附有一個標籤的輸入域
				   <h:outputText value=”Name:” / > <h:inputText value=”#{person.name}” />

這樣的對幾乎在每個 JSF 應用軟體中都能找到。即使這個地址組先前顯示在 圖 1 中也能找到三次。您需要將這兩個標籤置於一個單個的可用組件中,如列表 2所示。


列表 2. 可用組件
				   <my:inputLabel value=”#{person.name}” label=”Name:” />





創建一個自定義 JSF 組件

JSF 組件很少獨立存在。相反,它們多數是一個組件庫的組成部分,組件庫就是組件的集合,您可以將它們拖入到任何應用程序中,可以重複使用,以及共享。組件庫通常是一個單獨的 Java™ archive (JAR) 文件,它包括大量的組件,並且組件庫可以使用所有的配置文件。IBM 的 JWL, MyFaces 的 Tomahawk, 以及 JBOSS 的 RichFaces 都是組件庫的例子。

因此,要創建一個自定義組件,您首先要創建一個組件庫。

創建一個組件庫

要創建一個組件庫:

  1. 選擇 File > New > Project。
  2. 在 Web 目錄下,選擇 Faces Component Library Project。
  3. 點擊 Next。

New Faces Component Library 會打開。注意它看起來與您用來創建新 Web Project 的嚮導十分相似。唯一的區別是,Configuration 域設置為 Faces Component Library,如圖 2 所示。Rational Application Developer 中的整個自定義 JSF 組件的設計與您所熟悉的標準 Web 和 JSF 工具十分相似,這樣您的學習曲線就可以降到最低。


圖 2. New Faces Component Library 嚮導

  1. 給您的組件庫輸入一個名稱(在這個案例中是 MyComponents),然後點擊 Finish。
  2. 作為一名高級用戶,您可能需要在點擊 Finish 之前三次點擊 Next 按鈕。這樣您就可以調節一對組件庫設置,比如圖 3 中所顯示的它的 URI,前綴, 以及生成的 Java 類包裹名稱。

圖 3. Component Library 設置對話框

創建一個組件

  1. Library 項目已經創建,在 Enterprise Explorer 視圖中右鍵點擊這個項目的名稱,並選擇 New > Faces Custom Component。

一個 New Custom Component 嚮導會被打開。再次注意,這個嚮導與您曾打算創建的常規 Web 頁面幾乎一模一樣。唯一的不同是,您選擇用來將頁面定義為 Custom Faces Component 的特殊模板,如圖 4 所示。


圖 4. 新的自定義組件

  1. 為這個新組件輸入一個名稱(在這個案例中是 inputLabel),然後點擊 Finish。

當您點擊 Finish之後, Rational Application Developer 將創建一個 JSP 文件,可以讓您設計這個組件並在這個編輯器中打開。注意這只是一個常規的 JSP 文件,當您用它工作時,所有您熟悉的 Rational Application Developer 工具您都可以使用:

  • Palette
  • Properties
  • QuickEdit
  • PageData 視圖

然而,與常規 JSF 頁面不同的是,自定義組件並沒有 <BODY> 或者 <f:view> 標籤。相反,它使用了一個特殊的 <jsfc:component> 標籤,可以包含將組成您的自定義組件的其它 JSF 標籤。

檢查 Enterprise Explorer 視圖中您的存儲庫項目。注意您剛才創建的組件 JSP 文件之外,Rational Application Developer 還在這個存儲庫中生成了大量其它的文件,如圖 5 所示。


圖 5. 生成的文件

生成的文件包含以下內容:

  1. Component 類 (InputLabelComponent.java)
  2. JSP 標籤處理 (InputLabelTag.java)
  3. Renderer 類 (CustomComponentRenderer.java)
  4. 配置文件: faces-config 和標籤存儲庫 (faces-config.xml)
  5. Library JAR 文件包含所有的組件構架 (MyComponents.jar)
  6. 測試這個組件的頁面 (testInputLabel.jsp)

無論何時您對包含這個組件定義(在這個案例中是 inputLabel.jsp) 的 JSP 文件進行變更時,Rational Application Developer 就會自定重新生成所有其它功能組件存儲庫所需的文件。它然後會將它們打包到一個單獨的 JAR 文件中。這個 JAR 文件能夠有效地變成您自己的組件庫,您可以在以後項目中使用這個組件庫並與其他人一起分享。Rational Application Developer 還會生成一個測試頁面,使您能夠看到這個自定義組件被分配到這個伺服器時是如何操作的。

配置一個 Component

既然您現在已經創建了一個新組件,該配置它的屬性和屬性了。

  1. 回到在這個編輯器中打開的組件定義頁面 (inputLabel.jsp),然後選擇 <jsfc:component> 標籤(要麼通過點擊 Source 視圖中的標籤,要麼點擊 Design 視圖中的虛線矩形中的標籤來實現)。

您現在可以使用 Properties 視圖來配置這個新組件,如圖 6 所示。


圖 6. 組件屬性

  1. 使用 Properties 視圖,您可以配置:
    • 這個組件的 Tag 名稱 。默認情況下,這個標籤名稱與您創建的 JSP 名稱是相匹配的,但是這兩者不完全一樣。
    • 這個組件的 Description。這個描述應該對您組件的其他用戶有所幫助(如果您決定將它與其他人一起共享)。
    • 指定詳細的 Component 操作。JSF 規範定義了少量標準的組件,而且這些組件正是您希望您自己的組件在操作時與之相似。除了 Basic JSF 組件 之外,選項還包括一個 Input 組件,一個 Multi-Select 組件,以及一個 Command 組件。 當您選擇其中一個選項時,Rational Application Developer 將會自動生成被選擇組件類型的生成屬性,並在這個組件類中生成代碼來支持所選擇的操作。
    • 這個組件的 Attributes。
    • 最後,您要按照下面的操作來指示 Rational Application Developer: 當這個 JSP 變化時,不要改寫生成的 Java 類。這個選項對高級用戶是非常有幫助的,一旦這個組件類生成,這些用戶就會選擇手工調整這個類。在這種情況下,您要將 JSP 中的組件定義從這個組件的 Java 源中分離出來。

對於您的 inputLabel 組件,將它配置成得像一個 Input 組件一樣進行操作,並添加兩個屬性:標籤和值。

  1. 要添加屬性,可以點擊 Properties 視圖中的 Add 按鈕並輸入屬性 Name 和 Class,如圖 7 所示。您添加的兩個屬性將會成為 Class java.lang.String。

圖 7. 添加一個屬性

一旦配置,這個 inputLabel 組件的 Properties 視圖看起來就應該如圖 8 所示。


圖 8. 配置的組件

注意,因為您使這個組件像一個 Input 組件一樣操作,因而 Rational Application Developer 會自動添加 最接近的, 需要的,以及典型的 Input 組件的 valueChangeListener 屬性。

創建組件內容

現在該是定義這個 inputLabel 組件實際內容的時候了。正如您所記住的那樣,您想要它成為一個顯示標籤的 outputText,緊跟著的是顯示一個值的 inputText。

  1. 從 Palette 中,將一個 Output 和一個 Input 組件拖拽到這個頁面上。
  2. 從這個 PageData 視圖中,將 Output 組件捆綁到 標籤 屬性上,並將 Input 組件捆綁到 值 屬性上,可以通過將那些屬性拖拽到 Design 視圖組件頂端來實現,如圖 9 所示。

圖 9. 創建組件內容

注意您在 Properties 視圖中配置的自定義組件屬性也列在 Faces 組件 類別下的 PageData 視圖中。

當您將一個組件屬性捆綁到另一個組件上時,一個特殊的 JSF 表達就會產生來訪問這個屬性的運行時: #{component.attribute},如圖 10 所示。


圖 10. 組件源

這意味著,如果您將如這個案例一樣來使用這個組件, <my:inputLabel value=”#{person.name}” label=”Name:” />,那麼 outputText 的值將會變成 “Name:” ,同時 inputText 的值將會變成 #{person.name}。

這就是您在定義一個新組件內容所要做的一切。一旦您保存了這個頁面,Rational Application Developer 將會自動更新所有所需的構件,而且這個組件庫也可以隨時被使用。

測試這個組件

現在您已經創建了一個新組件,那麼在將它應用到實際應用軟體上或者將它與其它人共享之前,您可能要測試它是如何在伺服器上運行的。為了達到這個目的,Rational Application Developer 已經創建了一個測試頁面: testInputLabel.jsp。這個測試頁面是一個常規的 JSP,它包含這個新組件標籤,因此您要將它部署到一個伺服器上,從而可以查看這個新組件的行為。

  1. 打開 testInputLabel.jsp 文件。注意這個頁面源包含一個單獨的 <m:inputLabel> 標籤,然而這個 Design 視圖卻顯示了 outputText 以及這個新組件所包含的 inputText (請看圖 11)。 這個 Properties 視圖列出了所有的 inputLabel 組件屬性 (包括您早期添加的 標籤 和 值)。這個 QuickEdit 顯示了一個 Value Changed 事件,因為您配置了這個新組件,使它像一個 Input 樣操作。

圖 11. Component 測試頁面

  1. 使用這個 Properties 視圖,輸入一些 標籤 和 值 屬性,保存此頁面並在伺服器上運行它。

一旦這個瀏覽器打開,您將看到一個標籤后緊跟著的是一個輸入域,兩者都顯示了這個新組件屬性所制定的值(圖 12)。


圖 12. 在伺服器上運行

您現在已經使用 Rational Application Developer 工具創建了一個完整的功能性新 JSF 組件。





使用 Web 應用軟體中的自定義組件

您現在已經擁有一個全新的 JSF 組件庫,您可以在您的 Web 應用軟體中使用,也可以與其他同事分享。

Rational Application Developer 自動將屬於您的組件庫所有構件打包到一個單獨的 JAR 文件中,您可以自己使用也可以分配給其他人。然而,要充分使用 Rational Application Developer 的工具特性,您需要為您的存儲庫創建一個 存儲庫定義。為了簡短描述 Rational Application Developer 的支持,請看 參考資料 部分。

創建一個存儲庫定義

要為剛才創建的存儲庫創建一個存儲庫定義:

  1. 右鍵點擊 Enterprise Explorer 視圖中您的存儲庫項目 (MyComponents)。
  2. 選擇 New > Faces Library Definition。
  3. 在打開的 Create Faces Library Definition 嚮導中(圖 13)
    1. 輸入一個存儲庫名稱 (例如, MyLibrary)。
    2. 注意您的存儲庫項目已經預先選擇。
    3. 點擊 Finish。

圖 13. Library 定義

當 Rational Application Developer 完成了您存儲庫的處理過程后,編輯器就會打開。在編輯器中,您可以自定義您的新存儲庫和組件工具支持的所有方面:

  • Palette 中所顯示的內容
  • 組件是如何形象化的
  • 在過拽和放下操作中發生了什麼
  • 等等
  1. 制定一個超出這篇文章範圍的存儲庫定義,這樣您就只接受 Rational Application Developer 為定義所創建的構建。關閉瀏覽器。

既然 Library Definition 已經創建,您可以開始在常規 Web 項目中使用這個新存儲庫,或者您可以與其他人共享這個 Library Definition 項目 (MyLibrary)。

在 Web 應用軟體中使用這個自定義組件

  1. 使用 Faces 項目配置中創建一個新 Dynamic Web 項目,然後在其中創建一個新 Web 頁面。

當這個頁面在這個編輯器中打開時,您將看到您所創建的新組件存儲庫和新組件在 Palette 上都是可利用的,緊鄰所有常規 Rational Application Developer 面板抽屜,如圖 14 所示。


圖 14. Palette

  1. 將 inputLabel 組件從這個 Palette 拖拽到您的頁面上。因為這是您第一次在 Web 項目上使用這個新存儲庫, JAR 文件包括您的自定義組件,並且這些組件要拷貝到這個項目中。
  2. Rational Application Developer 將提示您來確認。點擊 OK 即可確認。

有了更早期的測試頁面,您將看到一個 <m:inputLabel> 標籤被添加到這個 Web 頁面的源中。這個標籤像一對 outputText 和 inputText 組件,較為形象化地顯示在 Design 視圖中,如先前的 圖 11 所示。這個標籤在 Properties 視圖中是可利用的,Value Changed 事件在 QuickEdit 視圖中也可以被使用。

  1. 在伺服器上運行這個頁面,您將在這個瀏覽器中看到這個組件描繪器,如先前 圖 12 所示。

您在 Web 項目中已經成功地使用了您自己自定義的 JSF 組件。(責任編輯:A6)






[火星人 via ] 在 IBM Rational Application Developer V7.5 中創建自定義 Java已經有260次圍觀

http://www.coctec.com/docs/linux/show-post-68902.html