1. 程式人生 > >IBM WebSphere Portal 6.0的主題與面板開發

IBM WebSphere Portal 6.0的主題與面板開發

1.1  入門:Portal的主題與面板開發

要了解如何開發Portal的主題,首先要了解IBM WebSphere Portal的顯示流程。IBM WebSphere Portal 使用不同的 Java Server PageJSP)、級聯樣式表(Cascading Style SheetCSS)和影象來顯示門戶頁面。它使用位於X:\WebSphere\AppServer\installedApps\YourNodeName\ wps.ear\wps.war 目錄下 themesskins  screens 目錄中的 JSP

來構造門戶頁面,其中每一個目錄下都包含htmlwmlchtml子目錄,WebSphere Portal用它們服務於不同的客戶機,例如桌面瀏覽器和移動裝置。這裡我們以通常使用的HTML方式下的主題開發為例,介紹Portal的主題開發。

所謂Portal的主題,指的是系統的整體介面風格與顯示方式,主要包括網站頁面初始化以前的呼叫、徽標logo、一級選單、二級選單、網站下邊的版權資訊,以及頁面初始化完成後的善後邏輯處理。我們要開發一套主題,可以直接複製themes/html下的一個包含有各個頁面檔案的資料夾,重新命名並在管理介面中新增、指定給相關頁面就可以了。在這個資料夾中,預設的初始呼叫檔案是

Default.jsp,這個檔案繪製了一張表格,然後在各個單元格內呼叫不同的檔案。在IBM WebSphere Portal 6.0中呼叫的檔案有:Head.jspAdminLinkBarInclude.jsp ToolBarInclude.jspPlaceBarInclude.jspPageBarInclude.js,以及延伸出來的PageBeginInclude.jsp PageEndInclude.jsp。下面進行詳細介紹。

微信圖片_20181114155527.png

1.1.1   Default.jsp

Portal系統的主題與面板的始化是從Default.jsp開始的,用於預設主題的

Default.jsp位於wp_root\app\wps.ear\ wps.war\themes\html下。這個JSP包含了其他用於顯示標題、公司徽標、工具欄的JSP,以及用於向頁面中插入內容的 JSP。在Default.jsp的末尾處,screenRender JSP指向被請求處理的頁面,例如loginforgotpasswordDefault.jsp初始化一張表格,表格內部劃分為單元格,每個單元格內可以直接顯示內容,也可以呼叫其他的JSP頁面。我們以從上到下、從左到右的順序來分別介紹開發主題所用到的頁面。下面介紹的JSP就是以這樣的順序先後呼叫的。

1.1.2  Head.jsp

Head.jsp 位於Default.jsp初始化表格的最上一行單元格內,負責生成標題並嵌入指向級聯樣式表文件的連結。它還定義了支援BiDi(雙向)文字所需的變數。這個頁面一般沒有實質性的顯示內容,例外的是,開發者喜歡在這裡初始化網頁的標題,通常是讀取屬性檔案,比如位於web_inf/下的engine.properties。這樣安排比較靈活,後期維護可以直接在屬性檔案裡面進行。當然,如果使用者的網頁標題是確定的而且不再更改,那麼也可以通過<title></title>在這裡定死,這比IBM公佈的以標籤方式寫容易,也更易使用。如果你開發了多套主題,而且這幾套主題的網頁標題也一樣(除了虛擬門戶,一般是這樣),那麼可以把這個檔案放到themes/html的根目錄下,其他主題的Default.jsp都來呼叫這個檔案就可以了。

1.1.3  AdminLinkBarInclude.jsp

AdminLinkBarInclude.jsp主要用來顯示“新建頁面”、“編輯頁面”和“分配頁面許可權”三個標籤。該檔案在Default.jsp初始化表格的第二行被呼叫。使用者使用這三個連結來建立、修改自己的個性化頁面,也可以由入口網站管理員來佈局整個網站的風格,管理頁面資源的許可權。不過,在開發實踐中你會發現,大部分客戶不喜歡這幾個標籤,他們要求將這些標籤放到管理頁面,取而代之的是一些歡迎資訊,比如:“某某員工,歡迎您登入!”。要實現這個也很容易,只要稍微修改一下這個頁面就可以了。實現方法是:我們在系統中新增一個標籤,這個標籤對應的Java檔案負責讀出登入使用者的姓名,並使用像JSP中新增JSTL一樣的方法,新增一個Label。在進行主題與面板開發時,只要在顯示歡迎資訊的地方應用這個標籤就可以了。

1.1.4  ToolBarInclude.jsp

ToolBarInclude.jsp用來顯示歡迎訊息,以及為使用者提供的連結工具欄。入口網站上顯示什麼樣的連結工具欄取決於使用者上下文。例如,登入的使用者會看到“我的入口網站”、“管理”(僅管理員可見)、“編輯我的‘概要檔案’”、“登出”之類的工具;而登出的使用者會看到“忘記密碼”、“登入”、“幫助” 之類的工具。通常的做法是將“管理”連結放到一個Portlet中,只有當登入的使用者是Portal系統管理員時,才在該Portlet中顯示歡迎資訊,或者其他的資源連結。

1.1.5  PlaceBarInclude.jsp

PlaceBarInclude.jsp用來顯示一級選單,即“首頁”、“文件管理器”、“公司概況”、“業務簡介”等,屬於最高層的目錄。在任何一個一級選單上都可以通過“新建頁面”來建立二級選單,所建立的內容將被儲存到資料庫(原始使用的是Cloundscape),也可以匯入到DB2Oracle等任何一個Portal所支援的資料庫中。

1.1.6  PageBarInclude.jsp

PageBarInclude.jsp用來顯示二級選單,當點選一級選單中的任何一個標籤時,系統會呼叫該檔案,並檢索出該選單的所有子選單,預設顯示在PlaceBar的下面。該檔案在Default.jsp初始化表格的第三行被呼叫,如果不呼叫該檔案,那麼包含子選單的一級選單被呼叫時,其子選單將在螢幕的左側顯示。該檔案位於面板資料夾下,具體的檔案操作我們將在後面的面板開發中介紹。

1.1.7  Portal 6.0中的檔案呼叫關係

現在介紹一下Portal 6.0中的檔案呼叫關係及其作用。如圖1-1所示為Portal開發一套主題需要呼叫的頁面清單。

微信圖片_201811141555271.png

1-1  Portal開發一套主題需要呼叫的頁面清單

其中幾個主要檔案的作用如圖1-2所示。

微信圖片_201811141555272.png

1-2  檔案的作用

1.2  初級:如何更換Portal系統的logo圖示

1.2.1  Default.jsp的工作原理

門戶系統的初始化頁面是從Default.jsp開始的。Default.jsp檔案呼叫其他不同的頁面分別顯示主頁上不同區域的內容。例如:

微信圖片_201811141555273.png

1.2.2  換一個logo

開啟Default.jsp,你會看到一個表格,在表格的左上角有這樣一段語句,用來顯示預設主題的logo圖示:

微信圖片_201811141555274.png

上面已經介紹過,整個Portal系統的頁面是Default.jsp初始化的一個大表格,用來顯示或者呼叫不同的JSP。我們在這個大表格的最左上角劃出一個<td>,用來顯示公司的徽標。這段語句的作用就是在這個單元格內插入一張圖片,名為Logo.gif

你可以將這個檔名改為自己想插入的任意一張圖片的名字,只要將這張圖片放到.war/images/目錄下就可以了。這裡支援幾乎所有的圖片格式,你可以任意擺放,大小、位置等都是你說了算。這時你可能會問:如何插入一個Flash呢?彆著急,下面將會介紹。

1.2.3  Flash動畫作Logo

Flash作徽標是個不錯的注意,它可以使入口網站看起來更豐富、生動一些。但是,Flash.swf格式的檔案,是不能直接通過這種方式來插入的,因為瀏覽器並不能識別它。要插入一個動畫,必須為它指定相應的驅動,你可以通過如下這段程式碼來生成。

微信圖片_201811141555275.png

這裡插入了一個名為firstpagelogo.swf的影片作公司徽標,它的大小是 510*81,請將這個影片檔案放在.war/images目錄下,重啟伺服器,看看首頁上是不是已經出現了Flash

細心的讀者可能已經發現,在安裝了更新系統編號為KB912945的補丁後,凡是一個頁面內使用<object><embed><applet>標籤的活動內容都不會被自動啟用,需要使用者手動擊,Flash控制元件也不例外這是微軟為了避免與Eolas公司和加利福尼亞大學發生專利侵權糾紛而釋出的一個IE非安全更新這不是Bug。但是安裝此更新後,在啟用ActiveX控制元件之前,無法某些網頁與這些控制元件互動要啟用 ActiveX 控制元件,請手動單擊該控制元件。這使得我們的入口網站看起來總有個虛框,好像一個疤痕。例如:

微信圖片_201811141555276.png

是不是很難看?沒關係,我們就在主題與面板開發中解決這個問題。

事實上,在head.jspf<head></head>我們已經呼叫了該主題下的JS檔案。你要確保沒有刪掉引用語句,否則其他的JS方法都不能使用,或者說,整個入口網站就被你這樣輕鬆地破壞了。如果確實已經刪除了,請確保加入以下語句。

微信圖片_201811141555277.png

然後開啟flyout.js檔案,加入如下函式。

微信圖片_201811141555278.png

後在需要插入Flash檔案的地方插入以下程式碼

微信圖片_201811141555279.png

重啟伺服器,再檢查一下,是不是虛框已經沒有了?

1.3  中級進階:開發個性化的Portal主題

1.3.1  理解各級選單

Default.jsp呼叫PlaceBarInclude.jsp檔案來顯示一級選單,如果一級選單下面還有二級選單,那麼當點選該一級選單時,Default.jsp將呼叫PageBarInclude.jsp來顯示二級選單。當然,也可以不呼叫該檔案,系統將預設呼叫Portlet面板中的LayerContainer.jsp檔案,用三級選單代替二級選單。這就是選單的個性化,這個方法使得系統的三級及三級以下的選單顯示在頁面的左側,就像Windows資源管理器一樣以樹形目錄顯示,使用者更容易接受。

開啟LayerContainer.jsp檔案,你會發現裡面的內容非常簡單。

首先有這樣一個標籤:

+1.png

意思是說,如果選單是可用的,那麼當登入進去以後將執行下面的操作。使用這句程式碼,必須引入Portal的標籤庫,具體的過程這裡不再贅述。接下來繪製了一個表格,用來顯示裡面的操作。

選單的左右協調:如果一共定義了十幾個一級選單,而一欄只能顯示8個,那麼剩下的選單怎麼辦?我們在這裡放置了兩個三角形小圖示,如果右邊還有更多的選單,小圖示會自動出現,當點選時,就會顯示剩下的選單。具體的程式碼是通用的,這裡不再贅述。需要強調的是,選單條在這裡只劃分為兩種情況:一是在選中的情況下,二是在未選中的情況下。

微信圖片_201811141555281.png

例如:

微信圖片_201811141555282.png

微信圖片_201811141555283.png

我們首先新增一張背景圖片,然後左側放一張圖片做字首,中間列印該選單條的名字,右側又放一張圖片做字尾,這樣整個選單條看起來就非常漂亮了。

接下來是顯示工具欄的情況:

微信圖片_201811141555284.png

這裡的操作將使具有許可權的使用者通過點選這張圖片,直接編輯相應的Portal頁面。不過,根據我的開發經驗,大部分使用者會隱藏這個入口,以免引起管理上的混亂。

最後的程式碼用來顯示系統收藏夾。登入後,會發現在一級選單的最右邊多出一個“我的最愛”,這是Portal系統自帶的收藏夾,可以通過這個入口將自己喜歡的頁面新增到收藏夾,然後就可以通過點選這裡直接進入到所收藏的頁面了。

1.3.2  個性化工具欄

要獲得個性化的工具欄,可以修改ToolBarInclude.jsp檔案,這個檔案提供了Portal系統管理員進到管理介面的入口。

在這裡可以編輯自己的“概要檔案”,針對個人的使用者資訊,修改自己的姓名、密碼等。更進一步,可以在這裡顯示歡迎資訊,例如,張三同志登入後,會顯示出:“歡迎您,張三同志!”。要實現這個功能實際上非常簡單,請看:

微信圖片_201811141555285.png

當然,需要引入相應的標籤庫。具體的應用屬於普通的JSP開發,你可以借鑑平常的開發經驗去實現。

1.3.3  個性化管理標籤

所謂的個性化,指的是可以刪除一個或者多個管理標籤,也可以根據自己的喜好新增標籤。這需要修改AdminLinkBarInclude.jsp檔案。例如:

微信圖片_201811141555286.png

這段程式碼用來顯示“新建頁面”的管理標籤,通過點選這個標籤,可以為當前頁面建立一個子頁面。同理,可以個性化“編輯頁面”和“分配頁面許可權”。當然,也可以隱藏這個入口。

1.4  高階探索:開發自適應解析度下的主題與面板

1.4.1  1024*768解析度下的主題

剛安裝好Portal系統後,上面介紹的幾個JSP檔案會在預設的.war/theme目錄下,你可以新建一個資料夾,將這幾個JSP檔案拷貝至該目錄下,然後在管理介面下新增該主題,該主題預設是1024*768解析度的。你可以開發多套主題。注意:請充分利用一些公共的資源,因為這些主題可能使用的是同樣的版權資訊,這樣就可以將PageEnd.jsp放到themes/entention下,然後讓所有的主題呼叫這個檔案。

當然,為了保險起見,可以在Default.jsp最外層的表格中這樣寫死:

微信圖片_201811141555287.png

1.4.2  800*600解析度下的主題

開發800*600解析度下的主題非常簡單,程式碼如下:

微信圖片_201811141555288.png

這個表格覆蓋到原來Default.jsp檔案中最外層的表格就可以了。注意:在Default.jsp呼叫的各個檔案中,可能都有表格存在,如果這些表格中有的寬度超過了800,或者兩個並列的表格寬度超過了800,請適當調小;否則裡面的表格會將此表格向兩側撐開,從而導致表格不協調。

1.4.3  1024800下自適應主題

要開發自適應主題就更簡單了!請設定一個變數w,先寫一個JavaScript指令碼,用來讀取客戶端的瀏覽器解析度,如果是800的,則給變數賦值w=800;如果是1024的,就賦值為w=1024。這樣Default.jsp初始化表格的寬度就以w來替代,對具體JSP檔案呼叫的單元格的長和寬都在原來的基礎上乘以1或者乘以0.78

1.5  高手過招:更改Portal系統的登入方式

1.5.1  從首頁登入

我們需要用WSAD開發一個Portlet,並在JSP中寫一個代理,將使用者憑證提交給系統自帶的認證Action中。這個Portlet可以這樣來設計:

<wps:if loggedIn="no">  //在沒有登入的情況下,提醒使用者輸入使用者名稱和密碼(見圖1-3

</wps:if>

微信圖片_201811141555289.png

1-3  登入介面

使用者單擊“登入”按鈕後,將使用者名稱和密碼提交到系統自帶的Action中。

微信圖片_2018111415552810.png

<wps:if loggedIn="yes">  

//如果已經登入了,則可以顯示使用者的常用資訊。比如,讀取使用者的Lotus郵箱,然後顯示有幾封郵件等(見圖1-4

</wps:if>

微信圖片_2018111415552811.png

1-4  顯示郵件資訊

甚至可以利用url-mapping自定義幾個頁面,從首頁直接進入業務系統,這樣就可以封死Portal頁面右上角自帶的“登入”標籤。也許你會問:我又想用系統自帶的頁面,怎麼辦呢?沒關係,你也可以在瀏覽器中輸入http://hostname:9081/wps/myportal,或者,乾脆直接輸入一個錯誤的使用者名稱和密碼,系統自然會帶你回到系統自帶的頁面。

1.5.2  拒絕系統自帶的登入頁面

但是採用上面介紹的方式,可能會出現這種情況:當用戶名或者密碼錯誤的時候,系統會返回到系統自帶的登入框上面。為避免這種情況,可以封死這個開關。

系統自帶的登入頁面是.war/screen/html下的login.jsp檔案,可以刪除該檔案裡的所有內容,然後加入這麼一句:

微信圖片_2018111415552812.png

這樣是不是帶你又回到了首頁呢?是的,確實如你所想,這樣就封死了系統自帶的登入頁面。如果你的使用者名稱或者密碼錯誤,或者你通過myportal直接呼叫,系統就會帶你回到首頁的登入介面,重新輸入。從這裡我們可以延伸開來,比如說Session過期、修改使用者的個人資訊等,都可以通過這種方式封掉這個介面。  

1.6  Portlet的面板開發

1.6.1  更換標題背景圖片

.war/skin/html下,系統已經存在了好幾套面板,開啟其中任意一個資料夾,你都能發現Control.jsp這個檔案。該檔案初始化一個小表格,該表格有兩行:第一行用來顯示Portlet的標題,後面是最大化、最小化、編輯按鈕;第二行是Portletbody,用來顯示Portlet的內容。一般來說,使用者喜歡在Portlet名稱前面或者後面放個小圖示等之類的裝飾,我們可以直接在這個單元格里面操作,這符合基本的HTML語法。當然,如果Portlet的名稱是固定的,我們也可以像開發Portal主題的選單一樣,用圖片來替代。其實只要判斷一下Portlet標題,如果符合,就呼叫相應的圖片,或者單獨為這個標題的Portlet開發一個面板,用於呼叫專門的圖片,或者直接顯示,或者作為背景,都很容易。

要換掉Portlet標題的背景圖片非常簡單,在第一個<td>裡面加上這麼一句程式碼:

微信圖片_2018111415552813.png

就一切OK了。

下面這個頁面是面板開發結合比較好的例子(見圖1-5),大家可以思考一下如何實現。

微信圖片_2018111415552814.png

1-5  面板開發結合比較好的頁面

1.6.2  隱藏工具圖示

有些使用者不喜歡Portlet有太複雜的操作介面,要求去掉“最大化”、“最小化”、“還原”等功能,當然也就不顯示了。其實這非常容易,看如下一段程式碼:

微信圖片_2018111415552815.png

這段程式碼是用來顯示“最小化”按鈕的,直接去掉就行了。而且,可以對此進行編輯,包括新增什麼顯示內容,甚至新增什麼新的事件等。同樣的道理,我們可以用相同的方法來操作“最大化”和“還原”兩個圖示。

1.6.3  個性化左側選單

在專案實施中我發現這樣一個有趣的現象:IBM產品的忠實使用者,往往鍾情於IBM系列產品的一貫風格。比如,某客戶幾年前實施的OA系統,“收件箱”、“發件箱”、“垃圾箱”等一系列選單全部豎排在螢幕的左側,那麼,客戶在實施Portal系統的時候,他就比較傾向於二級甚至一級選單全在左側豎排的情況。其實實現很簡單,只要我們不再呼叫原來用於顯示一級選單和二級選單的JSP頁面,一級選單就會以豎排的方式自動排列到螢幕的左側。那麼我們要想美化這種選單怎麼辦呢?我們可以很容易地找到這個檔案。

開啟skin目錄,你會發現有這樣一個檔案:LayeredContainer.jsp。不錯,就是它,它首先初始化一個表格:

微信圖片_2018111415552816.png

該表格左側就是三級選單(如果在Default.jsp中不再呼叫PageBar的話,這就是二級選單;如果連一級選單PlaceBar都不呼叫了,那麼它就是一級選單了)。右邊則是整個Portal系統的body部分,顯示了所有的Portlet。不曉得IBM為什麼要這樣安排,似乎有點不合理。不過,確實是在這裡修改的,可能是把它看做一個容器了吧!在左側的表格部分,你可以像編輯普通的網頁一樣,只要稍微有些美工知識,就可以隨心所欲地製作出個性化的左側管理選單了。

1.7  合理使用CSS樣式表 

看圖1-6所示的頁面效果,是不是非常漂亮。

微信圖片_2018111415552817.png

1-6  頁面效果

其實實現很簡單,看LayeredContainer.jsp檔案,下面是它的表格程式碼,稍微加一些CSS,就能實現這種效果了。比如面板右側漂亮的弧線,其實只要這麼簡單的一句話就OK了。

微信圖片_2018111415552818.png

們再來看看某電力公司的首頁(見圖1-7),這也是面板開發結合比較好的例子。請留意紅色框裡面的內容,裡面的弧線、角度堪稱美工與主題面板開發人員黃金搭檔的一個好例子。

微信圖片_2018111415552819.png

1-7  面板開發結合比較好的首頁

當然,這需要素質比較高的美工配合,也需要工程師在長期的開發中仔細琢磨。

1.8  主題與面板的部署

假設我們現在已經開發出一套主題和面板,那麼如何將這套主題和面板部署到門戶系統呢?下面是詳細的方法。

1.8.1  面板的部署

 ①將面板檔案傳送到這個路徑下(見圖1-8):

/opt/IBM/WebSphere/AppServer/profiles/ installedApps\cell-name/wps.ear/wps.war/skins/html/

微信圖片_2018111415552820.png

1-8  傳送面板檔案

 ②以門戶超級管理員身份登入,並依次單擊Launch”(啟動)→“Administration”(管理)→“WebSphere Portal”(Portal主門戶)→“Portal User Interface”(門戶介面)→“Themes and Skins”(主題和面板管理),如圖1-9所示。

微信圖片_2018111415552821.png

1-9  設定主題和面板

 ③單擊Add new theme”(新增新面板)按鈕,輸入面板的名稱和目錄名稱,如圖1-10所示。注意:目錄名稱必須與你上傳的目錄名稱一致,而且只填相對路徑。

微信圖片_2018111415552822.png

1-10  新增新面板

 ④單擊OK”按鈕,面板新增成功,如圖1-11所示。

微信圖片_2018111415552823.png

1-11  面板新增成功

 ⑤如果需要將該面板設為系統的預設面板,則可以選中該面板後,單擊右側的Set as default portal skin”(設為預設面板)按鈕,那麼以後當你沒有為主題或頁面上的Portlet指定面板時,系統將自動呼叫該面板,如圖1-12所示。

微信圖片_2018111415552824.png

1-12  設定預設面板

1.8.2  主題的部署

 ①將主題檔案上傳到這個目錄下(見圖1-13):

/opt/IBM/WebSphere/AppServer/profiles/ installedApps\cell-name/wps.ear/wps.war/themes/html/

微信圖片_2018111415552825.png

1-13  上傳主題檔案

 ②單擊Add new theme”(新增新主題)按鈕,並在接下來的介面中為主題指定名稱和所在目錄,如圖1-14所示。同面板的新增一樣,主題的目錄名稱也必須與主題的資料夾名稱一致。同時,還需要為該主題指定可能會用到的面板,如果希望使用預設面板,則可以將已經新增的面板設定為該主題的預設面板,那麼以後當你沒有為該主題下的Portlet指定面板時,系統將預設呼叫這套面板。

微信圖片_2018111415552826.png

1-14  新增新主題並指定面板

 ③單擊OK”按鈕,完成該主題的部署,如圖1-15所示。

微信圖片_2018111415552827.png

1-15  完成主題的部署

 ④如果希望將該主題設定為系統預設的主題,則可以選中該主題後,單擊右側的Setas default portal theme”(設為預設主題)按鈕,那麼以後當你沒有為門戶系統的頁面指定主題時,系統將自動呼叫該主題,如圖1-16所示。

微信圖片_2018111415552828.png

1-16  設定預設主題

1.8.3  使用XmlAccess命令匯入已經建立好的頁面

 將主題與面板檔案解壓到/opt/IBM/WebSphere/,如圖1-17所示。

微信圖片_2018111415552829.png

 /opt/IBM/WebSphere/主題目錄名/theme/目錄下確認檔案 updateJKThemePolicies.sh 具有正確的引數。

 SSH命令列執行命令 updateJKThemePolicies.sh,如圖1-18所示。

微信圖片_2018111415552830.png

1-18  執行命令

 為匯入的頁面分配主題,選擇主題JKEnterprises”,然後單擊“OK”按鈕,如圖1-19所示。

微信圖片_2018111415552831.png

1-19  選擇主題

1.8.4  檢查新主題是否已經起作用

 退出並重新以wpsadmin身份登入Portal系統,單擊“管理”進入管理介面,單擊“編輯頁面屬性”按鈕進入頁面屬性頁,確認該頁面的Theme(主題)所使用的主題是否為剛剛部署的新主題,如圖1-21所示。

微信圖片_2018111415552832.png

1-20  應用新主題與面板

確認是否發生變化,如圖1-21所示。

微信圖片_2018111415552833.png

1-21  應用了新主題與面板的登入介面

 登入進去後,發現主頁也已經應用了新主題與面板,如圖1-22所示。

微信圖片_2018111415552834.png

1-22  應用了新主題與面板的主頁

1.9  主題與面板的除錯

除錯主題與面板一般採用兩種方法:一是修改reload以便快速自動裝載的方法,二是複製並新增主題與面板的方法。

1.9.1  自動裝載法

我們知道,P<