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