contents.jsp 页面现在为用户显示了文件夹和报表的列表,并允许浏览这些文件夹。为了完成此页面,必须实现几个功能,它们确定在用户单击页面的不同部分时要执行的操作。
由于 path
和 foldersList
组件被绑定到相同的 EnterpriseItems
Bean(代表文件夹),因此,当用户单击其中一个组件时,另一个组件会自动更新。这样一来,单击 folderList
组件中的一个文件夹将会更新路径组件中的导航路径。
但是,页面上的 reportsList
组件被绑定到另一个 EnterpriseItem
Bean(代表报表)。当用户单击 path
或 foldersList
组件中的一个文件夹时,必须在 reportsList
组件中显示包含在该文件夹中的报表。必须在组件之间同步 EnterpriseItems
数据,以便能显示报表。
path
组件。
reportsList
组件。
注意: 如果尝试与某个组件同步,而该组件与其他组件都绑定到相同的 EnterpriseItems
Bean,则会显示一则消息,指出多个组件共享相同的 itemSource
属性值 (EnterpriseItems
Bean),以及如果添加与所选组件的同步,则将会添加与绑定到此 Bean 的所有组件的同步。单击“OK”以确认同步。
foldersList
组件并重复步骤 2 到 5,以便与 reportsList
组件同步。
现在,单击 path
或 foldersList
组件将会更新 reportsList
组件。有关其他信息,请参阅如何同步多个绑定到不同 EnterpriseItems Bean 的 ItemsGrid 和 Path 组件?
当用户单击 reportsList
组件中的报表时,您希望把他们重新定向到将呈现该报表的 view.jsp 页面去。在触发 ItemClicked
事件时,即表示要执行此操作。要实现此功能,必须执行几个过程:
reportsList
组件的 autoHandleEvents
属性设置为 false
。
关闭了默认事件处理后,您可以设计新的行为,以便在用户单击网格中的项目时执行。
reportsList
组件的 actionListener
属性中。
此方法获取事件数据,并将允许您将 EnterpriseItem
Bean(代表单个报表)的项目 ID 设置为用户在 reportsList
组件中单击的报表的 ID。
有关详细信息,请参阅将操作方法添加到 actionListener 属性中。
reportsList
组件的 action
属性中。
此方法返回一个操作字符串。此操作字符串由 faces
文件中的导航规则使用,用于确定在用户单击 reportsList
组件时将他们重定向到何处。
有关详细信息,请参阅将操作方法添加到操作属性中。
faces-c onfig.xml
文件。
如果按顺序完成了本逐步教程的课程,则您已经添加了此导航规则。有关详细信息,请参阅 用于查看报表的导航规则。
提示: 您也可以右击“contents.jsp”,然后单击“Edit Page Code”。
import com.businessobjects.jsf.sdk.event.ItemClickedEvent;
Contents
类:
String actionString = "";
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();
reportsList
组件。
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();
注意: 此步骤会打开可进行编辑的 Contents.java。
Contents
类中:
reportsList
组件。
action
属性设置为 #{pc_Contents.viewReport}
。
此步骤会创建一个方法,它绑定到位于 Contents.java 页面代码类(支持 Bean)中的 viewReport
方法。
此方法返回由 actionListener
属性的操作方法设置的操作字符串。当用户单击 reportsList
组件的第一列中的报表标题时,此字符串被设置为“view_report”。
Business Objects http://www.china.businessobjects.com 支持服务 http://www.china.businessobjects.com |