開始之前,您必須先完成練習 1.4:建立用來建立和更新使用者資訊的頁面。
在這個練習中,您將建立其他 Portlet 來提供協同作業行為,以利用 Click-to-Action 機制,將資料從來源 Portlet 傳送給目標 Portlet。來源 Portlet (ListingSearch) 會利用 Session Bean 來存取拍賣項目資料。 利用 ListingSearch Portlet 來尋找特定清單之後,目標 ListingDetail Portlet 會顯示搜尋所找到之項目的詳細資訊。 不論在任何情況中,您都必須先建立 Portlet。
如果要建立 ListingSearch Portlet,請遵循下列步驟:
這時會在編輯窗格中開啟 ListingSearchView.jsp。
在 Page Designer 中開啟 ListingSearchView.jsp 檔之後,請遵循下列步驟來新增 Session Bean 資料作為 ListingSearch 頁面的資料來源:
在這部分的練習中,您將新增 Java 頁面程式碼來完成下列動作:
您可以利用下列步驟來新增 EJB 參照邏輯以及將呼叫和結果連結到使用者介面的程式碼:
public String doListingFacadeLocalFindByTitleAction() { String title = getListingFacadeLocalFindByTitleParamBean().getTitle(); getSessionScope().put("title", title); try { listingFacadeLocalFindByTitleResultBean = getListingFacadeLocal().findByTitle(title); } catch (Exception e) { logException(e); } return null; }
public ListingFacadeLocalFindByTitleParamBean getListingFacadeLocalFindByTitleParamBean() { if (listingFacadeLocalFindByTitleParamBean == null) { listingFacadeLocalFindByTitleParamBean = new ListingFacadeLocalFindByTitleParamBean(); String title = (String)getSessionScope().get("title"); listingFacadeLocalFindByTitleParamBean.setTitle(title); } return listingFacadeLocalFindByTitleParamBean; }
public ItemData[] getListingFacadeLocalFindByTitleResultBean() { if (listingFacadeLocalFindByTitleResultBean == null) { String title = (String)getSessionScope().get("title"); if (title != null) { try { listingFacadeLocalFindByTitleResultBean = getListingFacadeLocal().findByTitle(title); } catch (Exception e) { logException(e); } } } return listingFacadeLocalFindByTitleResultBean; }
如果要建立 ListingDetail Portlet,請遵循下列步驟:
這時會在編輯窗格中開啟 ListingDetailView.jsp 檔。
在 Page Designer 中開啟 ListingDetailView.jsp 檔之後,請遵循下列步驟來新增 Session Bean 資料作為 ListingDetail 頁面的資料來源:
在這部分的練習中,您將新增 Java 頁面程式碼來完成下列動作:
您可以利用下列步驟來新增 EJB 參照邏輯以及將呼叫和結果連結到使用者介面的程式碼:
public String doListingFacadeLocalFindByIdAction() { Integer itemid = getListingFacadeLocalFindByIdParamBean().getItemid(); getSessionScope().put("itemid", itemid); try { listingFacadeLocalFindByIdResultBean = getListingFacadeLocal().findById(itemid); } catch (Exception e) { logException(e); } return null; }
public ListingFacadeLocalFindByIdParamBean getListingFacadeLocalFindByIdParamBean() { if (listingFacadeLocalFindByIdParamBean == null) { listingFacadeLocalFindByIdParamBean = new ListingFacadeLocalFindByIdParamBean(); Integer itemid = (Integer)getSessionScope().get("itemid"); listingFacadeLocalFindByIdParamBean.setItemid(itemid); } return listingFacadeLocalFindByIdParamBean; }
public ItemData getListingFacadeLocalFindByIdResultBean() { if (listingFacadeLocalFindByIdResultBean == null) { Integer itemid = (Integer)getSessionScope().get("itemid"); if (itemid != null) { try { listingFacadeLocalFindByIdResultBean = getListingFacadeLocal().findById(itemid); } catch (Exception e) { logException(e); } } } return listingFacadeLocalFindByIdResultBean; }
協同作業 Portlet 一詞是指頁面中的 Portlet 藉由共用資訊來互動的能力。 入口網站網頁中的一或多個協同作業 Portlet,可以自動反應來源 Portlet 中的動作或事件觸發的來源 Portlet 所產生的變更。 事件的目標 Portlet 則能夠作出反應,因此,使用者不需要在頁面的其他 Portlet 中進行反覆的變更或動作。 用來實作協同作業行為的機制稱為 Click-to-Action 事件。
請從來源 Portlet 的圖示啟動 Click-to-Action 事件。這個圖示會提供一份含有動作目標清單的蹦現功能表。 使用者選取特定目標之後,內容分配管理系統會以對應 Portlet 動作的形式,將資料遞送給目標。 當使用 Click-to-Action 遞送方法時,使用者只要按一下,就可以將資料從來源 Portlet 轉送給一或多個目標 Portlet,讓目標反應這個動作及顯示含有結果的新視圖。
請利用下列步驟來設定 ListingSearch 和 ListingDetail Portlet 之間的協同作業行為:
附註:請務必將 Click-to-Action 輸出內容物件放到輸出欄位上,不可放到它前面或後面。該輸出欄位應會強調顯示在矩形框中,類似如下所示:
。
(您可能必須將對話框移到一旁,才能看到輸出欄位選項。)
<h:outputText id="text3" value="#{varlistingFacadeLocalFindByTitleResultBean.itemid}" styleClass="outputText"> <f:convertNumber /> </h:outputText> <c2a:encodeProperty type="itemid" namespace="http://auctionportlet" name="itemid" value="#{varlistingFacadeLocalFindByTitleResultBean.itemid}"> </c2a:encodeProperty>請注意強調顯示的 value 屬性。如果「輸出內容」未正確新增至頁面,這個屬性將會遺失。
這些步驟將 ListingSearch 識別為來源 Portlet。之後,您必須將 ListingDetail 啟用成目標 Portlet:
如果要確認已正確識別 Click-to-Action 來源,請在專案瀏覽器中,回到「Portlet 部署描述子」資料夾。
表示來源 Portlet (ListingSearch) 和目標 Portlet (ListingDetails) 的圖示應該看起來如下:
如果要確認 ListingSearch 和 ListingDetail Portlet 的運作能夠符合預期,您應該在測試環境中執行它們。
如果要執行這個 Portlet,請執行下列動作:
在移到下一個練習之前,請先停止測試環境伺服器。
如果要停止測試環境伺服器,您只需要在「伺服器」視圖中選取它,再按一下停止伺服器工具列按鈕。
現在您已準備好開始進行練習 2.1:建立新入口網站以顯示 Portlet 應用程式。