如何同步多个绑定到不同 EnterpriseItems Bean 的 ItemsGrid 和 Path 组件?

考虑以下方案:在单个 JSP 页面上,有两个 ItemsGrid 组件和一个 Path 组件。名为 pathPath 组件,以及其中一个名为 foldersGridItemsGrid 组件均绑定到相同的 EnterpriseItems Bean(名为 folders)。此 EnterpriseItems Bean 代表着 Crystal Enterprise 系统中的一个文件夹层次结构,用户可以使用 pathfoldersGrid 浏览此层次结构。由于这两个组件均绑定到相同的 EnterpriseItems Bean,因此它们会自动同步,从而使得在用户利用其中一个组件进行浏览时,另一个组件会反映出这些更改。

但是,第二个名为 reportsListItemsGrid 组件绑定到另一个名为 reportsEnterpriseItems Bean,此 Bean 代表着任何指定文件夹中的一组 Crystal 报表。如何使 reportsList 与页面上的其他组件配合工作?解决方法是以正确的顺序同步这些组件。

为使第二个名为 reportsListItemsGrid 组件以有意义的方式与页面中的其他组件配合工作,必须同步这些组件,以便在用户浏览到 foldersListpath 中的某个文件夹级别时,reportsList 显示位于同一文件夹级别的报表。也就是说,每次用户单击文件夹网格或 Path 组件中的文件夹时,必须将 reports EnterpriseItems Bean 的 parentItemID 属性设置为 folders Bean 的 parentItemID 属性的当前值。结果,报表网格始终显示相同级别的信息。为了在组件之间实现这一配合,您要为 foldersList 组件和 path 组件设置同步。

同步组件
  1. 在可视化设计器中,选择 path 组件。
  2. 在属性视图中,单击“同步”选项卡。
  3. 单击“使用下列组件同步”,然后单击“添加”
  4. “选择一个要同步的组件”对话框中,选择要与当前组件同步的 reportsList 组件。
  5. 单击“确定”
  6. 注意:    如果尝试与某个组件同步,而该组件与其他组件都绑定到相同的 EnterpriseItems Bean,则会显示一则消息,指出多个组件共享相同的 itemSource 属性值 (EnterpriseItems Bean),以及如果添加与所选组件的同步,则将会添加与绑定到此 Bean 的所有组件的同步。单击“确定”以确认同步。

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

同步行为会向应用程序添加两段重要的代码。首先,会向 foldersListpath 组件添加一个操作侦听器:

actionListener="#{pc_<nameofpage>.doAction}"

此外,在页面(由 RAD 创建并通常名为 <nameofpage>.java)的后置代码 java 类中,添加了用于执行同步的操作事件处理程序方法:

public void doAction() {

reports.setParentItemID(folders.getParentItemID());

}

如您所见,同步的顺序很重要。在我们的例子中,我们将 foldersList 同步到 reportsList,将 path 同步到 reportsList。因此,当单击 foldersListpath 时,会同步 reportsList。但是,反过来是不正确的。您未将 reportsList 同步到 foldersList,因此,reportsList 中的操作不会影响 foldersList。当您确定选择哪个组件并在其上设置有关同步的设置时,请始终记住您想在应用程序中实现的行为。



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

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