百寶箱:幾乎所有專案都會用到的Portlet開發
1 百寶箱:幾乎所有專案都會用到的Portlet開發
“常用Portlet”指的是,在我做過的超過50家的企業門戶實施中,幾乎每個客戶都要求開發的幾個Portlet。這些Portlet有的是公共資訊,有的是工具箱,有的是車次查詢,有的是天氣預報,總之是使用者在日常辦公生活中最常使用的一些小功能。它們本身涉及的開發量不大,但卻依賴於Portal開發的一些技巧。
讀者掌握了這些Portlet的開發,一是為本章的學習嘗試實踐,二是你在接手一個Portal專案時,可以直接拿這些Portlet來用。依據我的經驗,這些Portlet都是大眾客戶所喜歡和需要的,所以本節的題目又叫“百寶箱”。
1.1 開發公共資訊相關的Portlet
1.1.1 要旨
Portal系統在使用者不登入的前提下,就是一個展現公共資訊的網站,唯一不同的是,這個網站的內容是以元件的形式構成的。用專業術語來說,就是整個Portal網站是由無數個Portlet組成的,每個Portlet是一個方面的內容。在現實的開發中,由於已經將自己的公共資訊資料化,所以我們只要從資料庫中提取這些資訊就可以了。下面舉了一些例子,這些例子都是在企業門戶系統開發中經常碰到的。
這是IT應用的一個例子,如圖1-1所示。
圖1-1 開發常用的Portelt(一)
這是
圖1-2 開發常用的Portelt(二)
要提取這些公共資訊,通常有兩種方法。
— 編寫Portlet,在Portlet的資料部分直接讀取後臺資料庫。這樣做比較獨立,且風格統一,但是會帶來巨大的系統開銷,所以不建議使用。
— 編寫讀取公共資訊的頁面,該頁面可以執行在具體的應用伺服器上,如WebSphere、WebLogic、Tomcat等。我們只要編寫一個Portlet,在Portlet中嵌入一個Iframe,用來顯示這個頁面就可以了。
本節主要針對第二種方法來討論公共資訊Portlet的開發方法。本節按照開發的步驟一步步介紹,沒有主次之分。
1.1.2 開發步驟
1.新建地址列表的屬性檔案
JspURL.properties的內容是結構化資料,用來儲存各新聞頁面的URL。例如:
2.在Portlet資料層讀取屬性檔案
GetUrl用於從JspURL.properties屬性檔案中讀取各個新聞頁面所在的URL。該類的大致內容如下:
我們在View頁面中嵌入一個Iframe,並指定它的URL屬性為從這個類中讀到的地址。
OK,這個公共資訊的Portlet就算開發完成了,我們把它打包併發布到Portal門戶系統,完成許可權分配,就可以定製並顯示在你的門戶網站了。
1.2 開發一個工具箱Portlet
車次查詢、天氣預報等公共小工具,是當前入口網站中比較受歡迎的小元件。這裡我們以在Portlet頁面上放置三個小圖示,點選時分別進入列車車次查詢、航班資訊和計算器為例,簡單介紹它們的開發方法:
開發這個Portlet請遵循以下步驟進行操作。
1.2.1 使用表格引入圖片
1.2.2 在圖片上繪製熱點用作連結
1.2.3 對連結給出事件處理
例如,我們可以對“天氣預報”做如下處理。
通過天氣預報Portlet可以檢視到公司下屬單位所在地市以及全國幾個主要城市的當天天氣情況,如圖1-3所示。
圖1-3 開發天氣預報的Portlet
單擊右側的按鈕進入編輯頁面,如圖1-3a所示,這個Portlet允許每個使用者設定預報地點。
圖1-3a 天氣預報Portlet允許每個使用者設定預報地點
OK,這個Portlet的View部分就算處理完成了,至於Model和Controller部分,可以新增這些事件的處理方法,用來讀取實際資料。比如,從指定的URL處讀取天氣預報資訊,並存儲到一個物件裡,寫入Session,然後在View裡面顯示出來。
1.3 開發個人日程的Portlet
1.3.1 開發要旨
匿名使用者開啟Portal頁面時看到的是一個日曆,Portal使用者登入後,多出一個“新增日程/日程管理”按鈕,使用者可以在這裡新增、管理自己的日程。
1.3.2 資料庫設計
個人日程管理欄位比較簡單,資料併發處理很少,對資料庫要求不高,所以我們選用Access。具體的欄位設定不再贅述。
1.3.3 業務流程設計
Portlet首先試圖獲取使用者id,如果id為空,則說明使用者未登入,此時顯示一個日曆;如果id非空,則顯示個人日程。Portlet會從資料庫中檢索此使用者id的日程條目,然後將有日程的日期變為紅色,使用者點選該日期時彈出此日程條目。在日程條目上,使用者可以編輯自己的日程;使用者新增日程時,以Portal取得的使用者id為主鍵,加入資料庫。
具體的業務流程如下。
通過個人日程的Portlet可以瞭解當前日期及日程安排,如圖1-4所示。
圖1-4 個人日程的Portlet允許每個人定義自己的備忘錄
通過調整年、月可以看到相應的日期。如果該日期有日程安排活動,則會顯示不同的顏色,點選該日期就可以看到日程安排情況,如圖1-5所示。
單擊“新建日程”,會出現如圖1-6所示的介面,可以新增自己的個人日程。
圖1-5 有訊息提醒的日期會在個人日程上以不同的顏色顯示
圖1-6 可以新增自己的個人日程
使用者可以新增日程安排,包括日程標題、起始/結束時間、提醒設定、日程內容等。
其中的起始/結束時間都可以精確到分鐘。“提醒設定”中的“迴圈提醒”用於設定該資訊是以天還是周、月、年等進行迴圈來顯示;“開始時間前x分鐘彈出提醒”是根據使用者的設定,在該日程開始前多長時間給使用者提醒;“簡訊提醒”則是通過簡訊的方式來提醒使用者(目前因為簡訊平臺還沒有建成,所以此功能暫時不能使用)。當設定完成並儲存後,安排日程的日期就會變成淺藍色,且會在“今日提醒”中顯示出來。
日程提醒有三種方式:一是以列表顯示;二是滾動提醒,在“我的工作”頁面的“今日提醒”模組中進行滾動提醒;三是彈出視窗提醒,在“開始前x分鐘彈出提醒”設定的時間點(伺服器時間),在“我的工作”頁面中彈出視窗進行提醒。
1.3.4 程式碼實現
1.顯示頁面
這裡只顯示比較重要的部分。
2.顯示日程條目
使用者點選有日程提示的日期時,會彈出該日程。
具體編碼略,我採用的顯示格式如下。
3.增加日程
單擊“增加日程”,可以為登入使用者新增日程。
4.修改日程
在顯示的日程條目上,單擊“編輯日程”,可以修改此日程條目。
1.3.5 介面美化
為了使日程顯示介面清晰、美觀,還需要進一步美化,美化的過程本書不再介紹。
1.4 開發一個Excel檔案轉txt的工具Portlet
這個工具Portlet的用途是,很多時候應用系統的一些資料儲存在Excel表格裡,我們需要匯出這些資料,例如:使用者與使用者組資訊。
1.4.1 使用說明
(1)本工具使用了jxl.jar包,所以請先將此包加入到Porltet類庫。當然,你也可以直接在Tomcat中除錯,那麼目標容器是Tomcat,則需要將此檔案手工複製到Tomcat的類庫資料夾裡。
(2)將主檔案 reansfer.jsp複製到容器目錄下,在瀏覽器裡直接訪問該頁面,程式即執行。
(3)在預設情況下,需要將原始檔*.xls複製到C:\下,生成的檔名稱為:qas_1.txt。
(4)如果需要批量轉換,或者需要自己選擇檔案、資料夾,則請自行修改程式碼。
1.4.2 程式碼詳解
要開發這個Portlet,首先需要到網上下載一個Excel轉txt的控制元件,然後新建一個Portlet,在Portlet的顯示層(PortletView.jsp檔案)裡控制邏輯。
下面是該檔案的部分原始碼,僅供參考。