最新最全的Portlet 通訊過程詳解

CloudSpace發表於2009-11-16

本文通過詳細的步驟介紹了 JSR 168 Portlet 通訊的場景以及實現它們之間通訊的過程。

Portlet 通訊過程詳解

Portal開發過程中,Theme 與 portlet 之間的通訊,以及 portlet 之間的通訊是開發人員常常遇到的問題。通常 Portlet 之間需要能夠互相通訊,即一個 portlet 的狀態發生改變,要通知其他的 portlet,這些收到通知的 Portlet 狀態也要做相應的改變。根據 JSR 168 規範,Portlet 由容器管理,它們之間是相互獨立的,並不共享 Session 物件。那麼如何在 Portlet 之間傳遞引數呢?在本文中,將根據不同應用場景介紹引數傳遞的方式。

IBM Rational Application Developer V7.0 和 IBM Rational Software Architect V7.0 是 IBM Rational 軟體交付平臺產品系列中的第一款產品,它們包含了對 IBM WebSphere Portal V6.0 開發的完整支援。在下面的例項中,我們以 IBM Rational Software Architect V7.0 為開發平臺,對 Portlet 的引數傳遞進行介紹。

概念介紹

首先,我們先介紹一些 portal 的基本概念。

Portal 的定義

Portal 是一個基於 web 的應用程式,它主要提供個性化、單點登入、不同來源的內容整合以及存放資訊系統的表示層。

Portlet 的定義

Portlet 是基於 java 技術的 web 元件,它由 portlet 容器管理、並處理請求,並動態生成輸出內容。就像 servlets 是專為將合成頁面裡的內容聚集在一起而設計的。通常請求一個 portal 頁面會引發多個 portlets 被呼叫。每個 portlet 都會生成標記段,並與別的 portlets 生成的標記段組合在一起嵌入到 portal 頁面的標記內。

Portal 規範

為規範 Portal,SUN 於 2003 年底制定了 JSR168,它定義了 portlet 標準,並給出了一個實現介面。

Portlet 組成

每個 portlet 頁面由一個或多個 portlet 視窗組成,每個 portlet 視窗又分為兩部分:一個是主題外觀(Theme),它決定了 portlet 視窗的標題條、控制和邊界的樣式;另一個是 portlet 段,它由 portlet 應用填充。

同一頁面內的不同 portlet 間的通訊

對放在同一個頁面上的 Portlet.,如果其中的某個 Portlet 做了提交等操作導致 portal 重新整理, 這個頁面內的每一個 portlet 都會被 render。要實現引數的傳遞通常有 3 個步驟:定義源 portlet,定義目標 portlet,關聯源 portlet 和目標 portlet。

建立傳送端 Portlet

首先我們先建立一個Portlet Project,點選Next


圖 1. 新建 Portlet Project
圖 1. 新建 Portlet Project

Project name中輸入MyProjectprojTarget Runtime選擇Websphere Portal v6.0,在Portlet API中選擇JSR 168 Portlet,選中Create a Portlet,在Project Name中輸入SenderPortlet,在Portlet Type中選擇Basic Portlet,選擇Show Advanced Settings,點選Next


圖 2. 填寫 Portlet Project 基本屬性
圖 2. 填寫 Portlet Project 基本屬性

Project Facets皮膚中,選中Java,在version中選擇1.4,其他項保持不變,點選Next


圖 3. 配置 Facets 屬性
圖 3. 配置 Facets 屬性

Portlet Settings對話方塊中修改Package Prefxcom.ibm.myportlet,其他選項保持預設,點選Finish


圖 4. 修改 Portlet 配置引數
圖 4. 修改 Portlet 配置引數

至此,我們已經建立了一個新的 Portlet 專案,其中包含一個名稱為 SenderPortlet 的 Portlet。

建立接收端 Portlet

Project中點選右鍵,點選New->Portlet,彈出 Portlet 建立嚮導對話方塊;


圖 5. 新建 ReceiverPortlet
圖 5. 新建 ReceiverPortlet

Project中選擇MyPortletproj,在Project name中輸入ReceiverPortletPortlet中選擇Baisc Portlet,點選Next


圖 6 Portlet 屬性
圖 6 Portlet 屬性

Portlet Settings對話方塊中修改Package Prefxcom.ibm.myportlet,其他選項保持預設,點選Finish


圖 7. 修改 Portlet 配置引數
圖 7. 修改 Portlet 配置引數

這樣我們就建立了ReceiverPortlet,並把它加入到了MyPortletproj專案中。

SenderPortlet上點選右鍵,點選Coorperative->EnablethisProtlettoSendData(Source) …


圖 8. Portlet 協作-傳送端配置
圖 8. Portlet 協作-傳送端配置

Coorperative對話方塊中,在輸入框DataTypeURI中輸入http://myportletproj#MyDataType,在Java Type中輸入java.lang.String,點選Next


圖 9. 定義傳送的資料型別
圖 9. 定義傳送的資料型別

Property Caption中保留預設值outputProperty Property,在Action Caption中保留預設值SourceAction Action,點選Next


圖 10. 定義傳送端的 Action 名稱和引數名稱
圖 10. 定義傳送端的 Action 名稱和引數名稱

點選Finish


圖 11. 使能傳送資料
圖 11. 使能傳送資料

SenderPortletprocessAction程式碼片斷。我們在上面定義了傳送的引數名稱為outputProperty


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-619695/,如需轉載,請註明出處,否則將追究法律責任。

相關文章