加入事件處理

請參閱  

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

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

同步化內容導覽

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

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

同步化元件
  1. 在 visual designer 中,選取 [path] 元件。
  2. 在 [Properties] 檢視中,按一下 [Synchronization] 索引標籤。
  3. 按一下 [Synchronize with the following components],然後再按 [Add]
  4. [Select a Component to Synchronize] 對話方塊中,選取 reportsList 元件,與目前元件進行同步化。
  5. 按一下 [OK]
  6. 注意:    如果元件和其他元件一樣都繫結至相同的 EnterpriseItems Bean,當嘗試與此元件同步化時,會顯示訊息指出有多個元件共用相同 itemSource 屬性值 (EnterpriseItems Bean);此外,如果將同步化加入選取的元件,同步化也會加至繫結到這個 Bean 的所有元件。按一下 [OK] 以確認同步化。

  7. 在 visual designer 中選取 foldersList 元件,並重複步驟 2 至 5,與 reportsList 元件進行同步化。

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

從格線中檢視報表

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

將動作方法加至 actionListener 屬性
  1. 開啟檔案 contents.jsp。按滑鼠右鍵並選取 [Edit Page Code]
    Contents.java 檔案便會開啟。
  2. 將下列成員宣告加入到 Contents.java 檔案的 Contents 類別中:
  3. String actionString = "";

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

  6. 儲存並關閉 Contents.java。
  7. reportsList 元件的 [Properties] 檢視中,按一下 [Quick Edit] 索引標籤。
  8. 按一下 [Action] 圖示,並將下列方法輸入到 [Quick Edit] 文字方塊:
  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 == 1)

{

actionString = "view_report";

}

else

{

actionString = "";

}

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

  4. 儲存 contents.jsp

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

import com.businessobjects.jsf.sdk.event.ItemClickedEvent;

String actionString = "";

public void doActionListener(ActionEvent event)

{

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 = "";

}

}

}

if (event instanceof ItemClickedEvent)

ItemClickedEvent currentEvent = (ItemClickedEvent) event;

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

getEnterpriseItem().setItemID(reportID);

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

if (columnIndex == 1)

{

actionString = "view_report";

}

else

{

actionString = "";

}

public String viewReport()

{

return actionString;

}



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