考虑以下方案:在单个 JSP 页面上,有两个 ItemsGrid 组件和一个 Path 组件。名为 path 的 Path 组件,以及其中一个名为 foldersGrid 的 ItemsGrid 组件均绑定到相同的 EnterpriseItems Bean(名为 folders)。此 EnterpriseItems Bean 代表着 BusinessObjects Enterprise 系统中的一个文件夹层次结构,用户可以使用 path 和 foldersGrid 浏览此层次结构。由于这两个组件均绑定到相同的 EnterpriseItems Bean,因此它们会自动同步,从而使得在用户利用其中一个组件进行浏览时,另一个组件会反映出这些更改。
但是,第二个名为 reportsList 的 ItemsGrid 组件绑定到另一个名为 reports 的 EnterpriseItems Bean,此 Bean 代表着任何指定文件夹中的一组 Crystal 报表。如何使 reportsList 与页面上的其他组件配合工作?解决方法是以正确的顺序同步这些组件。
为使第二个名为 reportsList 的 ItemsGrid 组件以有意义的方式与页面中的其他组件配合工作,必须同步这些组件,以便在用户浏览到 foldersList 或 path 中的某个文件夹级别时,reportsList 显示位于同一文件夹级别的报表。也就是说,每次用户单击文件夹网格或 Path 组件中的文件夹时,必须将 reports EnterpriseItems Bean 的 parentItemID 属性设置为 folders Bean 的 parentItemID 属性的当前值。结果,报表网格始终显示相同级别的信息。为了在组件之间实现这一配合,您要为 foldersList 组件和 path 组件设置同步。
path 组件。reportsList 组件。注意:
如果尝试与某个组件同步,而该组件与其他组件都绑定到相同的 EnterpriseItems Bean,则会显示一则消息,指出多个组件共享相同的 itemSource 属性值 (EnterpriseItems Bean),以及如果添加与所选组件的同步,则将会添加与绑定到此 Bean 的所有组件的同步。单击“确定”以确认同步。
foldersList 组件并重复步骤 2 到 5,以便与 reportsList 组件同步。同步行为会向应用程序添加两段重要的代码。首先,会向 foldersList 和 path 组件添加一个操作侦听器:
actionListener="#{pc_<nameofpage>.doAction}"
此外,在页面(由 Rational Application Developer 创建并通常名为 <nameofpage>.java)的后置代码 java 类中,添加了用于执行同步的操作事件处理程序方法:
public void doAction() {
reports.setParentItemID(folders.getParentItemID());
}
如您所见,同步的顺序很重要。在我们的例子中,我们将 foldersList 同步到 reportsList,将 path 同步到 reportsList。因此,当单击 foldersList 或 path 时,会同步 reportsList。但是,反过来是不正确的。您未将 reportsList 同步到 foldersList,因此,reportsList 中的操作不会影响 foldersList。当您确定选择哪个组件并在其上设置有关同步的设置时,请始终记住您想在应用程序中实现的行为。
| Business Objects http://www.china.businessobjects.com/ 支持服务 http://www.china.businessobjects.com/services/services.htm |