添加事件处理

另请参见  

contents.jsp 页面现在为用户显示了文件夹和报表的列表,并允许浏览这些文件夹。为了完成此页面,必须实现几个功能,它们确定在用户单击页面的不同部分时要执行的操作。

单击相应链接可跳转至该节:

同步内容导航

由于 pathfoldersList 组件被绑定到相同的 EnterpriseItems Bean(代表文件夹),因此,当用户单击其中一个组件时,另一个组件会自动更新。这样一来,单击 folderList 组件中的一个文件夹将会更新路径组件中的导航路径。

但是,页面上的 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 事件时,即表示要执行此操作。要实现此功能,必须执行几个过程:

将操作方法添加到 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 组件的属性视图中,单击“快速编辑”选项卡。
  8. 单击“Action”图标并将以下方法输入“快速编辑”文本框中:
  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 组件的属性视图中,单击“快速编辑”选项卡。
  2. 单击“Command”图标并将以下方法输入“快速编辑”文本框中:
  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.china.businessobjects.com/

支持服务
http://www.china.businessobjects.com/services/services.htm