添加事件处理

另请参见  

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

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

同步内容导航

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

但是,页面上的 reportsList 组件被绑定到另一个 EnterpriseItem Bean(代表报表)。当用户单击 pathfoldersList 组件中的一个文件夹时,必须在 reportsList 组件中显示包含在该文件夹中的报表。必须在组件之间同步 EnterpriseItems 数据,以便能显示报表。

同步组件
  1. 在可视设计器中,选择 path 组件。
  2. 在 Properties 视图中,单击“Synchronization”选项卡。
  3. 单击“Synchronize with the following components”,然后单击“Add”
  4. “Select a Component to Synchronize”对话框中,选择要与当前组件同步的 reportsList 组件。
  5. 单击“确定”

    注意:    如果尝试与某个组件同步,而该组件与其他组件都绑定到相同的 EnterpriseItems Bean,则会显示一则消息,指出多个组件共享相同的 itemSource 属性值 (EnterpriseItems Bean),以及如果添加与所选组件的同步,则将会添加与绑定到此 Bean 的所有组件的同步。单击“OK”以确认同步。

  6. 在可视设计器中,选择 foldersList 组件并重复步骤 2 到 5,以便与 reportsList 组件同步。

现在,单击 pathfoldersList 组件将会更新 reportsList 组件。有关其他信息,请参阅如何同步多个绑定到不同 EnterpriseItems Bean 的 ItemsGrid 和 Path 组件?

查看网格中的报表

当用户单击 reportsList 组件中的报表时,您希望把他们重新定向到将呈现该报表的 view.jsp 页面去。在触发 ItemClicked 事件时,即表示要执行此操作。要实现此功能,必须执行几个过程:

将操作方法添加到 actionListener 属性中
  1. 在 Project Explorer 视图中,展开“Dynamic Web Projects”节点,然后在 Web 项目下导航至“Java Resources”>“JavaSource”>“pagecode”
  2. 双击“Contents.java”以打开此文件进行编辑。

    提示:    您也可以右击“contents.jsp”,然后单击“Edit Page Code”。

  3. 将下面的导入语句添加到文件顶部,位于现有的导入语句下面:

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

  4. 将下面的成员声明添加到 Contents 类:

    String actionString = "";

  5. 将以下方法添加到 Contents 类中:

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

    }

    }

    }

  6. 保存并关闭 Contents.java。
  7. 在可视设计器中打开 contents.jsp 并选择 reportsList 组件。
  8. 在 Properties 视图中,将 actionListener 属性设置为 #{pc_Contents.doActionListener}

    此步骤创建一个方法,它绑定到名为 doActionListener 且位于 Contents.java 页面代码类(支持 Bean)中的方法。

doActionListener 方法通过检查以确定当前触发的事件是否为 ItemClicked 事件,该事件指出用户单击了 reportsGrid 组件中的项目:

if (event instanceof ItemClickedEvent)

如果应用程序触发了 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. 右击“contents.jsp”,再单击 “Edit Page Code”。

    注意:    此步骤会打开可进行编辑的 Contents.java。

  2. 将以下方法添加到 Contents 类中:

    public String viewReport()

    {

    return actionString;

    }

  3. 保存并关闭 Contents.java。
  4. 在可视设计器中打开 contents.jsp 并选择 reportsList 组件。
  5. 在 Properties 视图中,将 action 属性设置为 #{pc_Contents.viewReport}

    此步骤会创建一个方法,它绑定到位于 Contents.java 页面代码类(支持 Bean)中的 viewReport 方法。

此方法返回由 actionListener 属性的操作方法设置的操作字符串。当用户单击 reportsList 组件的第一列中的报表标题时,此字符串被设置为“view_report”。


Business Objects
http://www.china.businessobjects.com

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