加入事件處理

請參閱  

contents.jsp 頁面現在即可向使用者顯示資料夾及報表的清單,並允許導覽這些資料夾。若要完成頁面,則必須實作幾項功能,以決定使用者按一下頁面上各種組件時所要採取的動作。

按一下適當的連結,以跳至該小節:

同步化內容導覽

因為 pathfoldersList 元件都繫結至相同的 EnterpriseItems Bean (代表資料夾),當使用者按下其中一個元件時,另一個就會自動更新。因此,按一下 folderList 元件中的資料夾,便會更新 path 元件中的導覽路徑。

不過,頁面上的 reportsList 元件是繫結至不同的 EnterpriseItem Bean (代表報表)。當使用者按一下 pathfoldersList 元件中的資料夾時,該資料夾包含的報表必須顯示在 reportsList 元件中。為了報表之顯示,您就必須在元件之間同步化 EnterpriseItems 資料。

同步化元件
  1. 在視覺化設計工具中,選取 path 元件。
  2. 在 [屬性] 檢視中,按一下 [同步化] 索引標籤。
  3. 按一下 [與下列元件同步化],然後再按 [新增]
  4. [選取要同步化的元件] 對話方塊中,選取 reportsList 元件,與目前元件進行同步化。
  5. 按一下 [確定]
  6. 注意:
       
    如果元件和其他元件一樣都繫結至相同的 EnterpriseItems Bean,當嘗試與此元件同步化時,會顯示訊息指出有多個元件共用相同 itemSource 屬性值 (EnterpriseItems Bean);此外,如果將同步化加入選取的元件,同步化也會加至繫結到這個 Bean 的所有元件。按一下 [確定] 以確認同步化。

  7. 在視覺化設計工具中選取 foldersList 元件,並重複步驟 2 至 5,與 reportsList 元件進行同步化。

按一下 pathfoldersList 元件會立即更新 reportsList 元件。如需其他資訊,請參閱我要如何同步化繫結至不同 EnterpriseItems Bean 的多個 ItemsGrid 及 Path 元件?

從格線中檢視報表

當使用者按一下 reportsList 元件中的報表時,您想要將他們重新導向至 view.jsp 頁面,以便在其中建構報表。這個動作會在觸發 ItemClicked 事件時啟動。若要啟用這個功能,您必須執行幾項程序:

關閉 reportsList 元件的預設事件處理
將動作方法加至 actionListener 屬性
  1. 開啟檔案 contents.jsp。按滑鼠右鍵並選取 [編輯頁面程式碼]
    Contents.java 檔案便會開啟。
  2. 將下列成員宣告加入到 Contents.java 檔案的 Contents 類別中:
  3. String actionString = "";

  4. 將下列匯入陳述式加入到檔案上方:
  5. import com.businessobjects.jsf.sdk.event.ItemClickedEvent;

  6. 儲存並關閉 Contents.java。
  7. reportsList 元件的 [屬性] 檢視中,按一下 [快速編輯] 索引標籤。
  8. 按一下 [動作] 圖示,並將下列方法輸入到 [快速編輯] 文字方塊:
  9.     if (event instanceof ItemClickedEvent)

        {

            ItemClickedEvent currentEvent = (ItemClickedEvent) event;

            String reportID = currentEvent.getEventArgs().getItemID();

            getEnterpriseItem().setItemID(reportID);

            int columnIndex = currentEvent.getEventArgs().getColumnIndex();

            if (columnIndex == 0)

            {

                actionString = "view_report";

            }

            else

            {

                actionString = "";

            }

        }

  10. 儲存 contents.jsp

動作方法會查看目前觸發的事件是否為 ItemClicked 事件 (此事件指出使用者按了一下 reportsGrid 元件的項目):如果 ItemClicked 事件是由應用程式所觸發,便會從事件資料中擷取被按一下之報表的報表 ID:

ItemClickedEvent currentEvent = (ItemClickedEvent) event;

String reportID = currentEvent.getEventArgs().getItemID();

這個報表 ID 會接著設定為 EnterpriseItem Bean 的 ItemID 屬性,做為下一頁 (view.jsp) 中 ReportPageViewer 元件的報表來源:

getEnterpriseItem().setItemID(reportID);

最後,方法會查看 reportsGrid 元件的哪一個資料行被按下。在本教學課程中,只有報表標題 (第一個資料行) 會觸發應用程式以檢視報表。如果按下的是其他資料行 (如報表的說明),就不會執行任何動作:

int columnIndex = currentEvent.getEventArgs().getColumnIndex();

if (columnIndex == 0)

{

    actionString = "view_report";

}

else

{

    actionString = "";

}

將動作方法加至動作屬性
  1. reportsList 元件的 [屬性] 檢視中,按一下 [快速編輯] 索引標籤。
  2. 按一下 [命令] 圖示,並將下列方法輸入到 [快速編輯] 文字方塊:
  3.     return actionString;

  4. 儲存 contents.jsp

這個方法會傳回動作方法所設定的動作字串。當使用者按一下 reportsList 元件第一個資料行中的報表標題時,會將這個字串設定為 [view_report]。






Business Objects
http://www.taiwan.businessobjects.com/
支援服務
http://www.businessobjects.com/services/support/