考虑以下方案:在单个 JSP 页面上,有两个 ItemsGrid
组件和一个 Path
组件。名为 path
的 Path
组件,以及其中一个名为 foldersGrid
的 ItemsGrid
组件均绑定到相同的 EnterpriseItems
Bean(名为 folders
)。此 EnterpriseItems
Bean 代表着 Crystal 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}"
此外,在页面(由 RAD 创建并通常名为 <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 |