主题
Linux
Oracle JDeveloper 方法文档
作者: Katarina Obradovic-Sarkic,Oracle Corporation
2007 年 4 月
ADF 数据可视化组件是一组丰富的交互式 ADF Faces 组件,可以为数据分析提供重要的图形和表格化功能。数据可视化组件提供了以下常用特性:
本文的对象为有意深入了解 DVT 组件的用户。在开始创建和使用 Data 可视化组件之前,建议您完成以下步骤:
ADF DVT 图形支持 50 多种类型,例如,条形图、饼图、直线图、散点图和股票图,可允许您以多种方式评估多个轴上的数据点。图形自 10g 后就是 JDeveloper 的一部分,现在是一个 JSF 组件。图形的新特性包括:
本文介绍了在普通应用情形下 ADF DVT 图形的使用,并提供了示例。以下部分将向您阐释如何
时间选择器是可显示在任何图形上的窗口,带有时间轴(显示时间数据的轴)。用户可移动这一窗口并拖动其边缘选择时段。应用程序可以监听时间选择器事件,获取用户选定时段的新起始和终止日期。
下图显示了一个带时间选择器窗口的时间轴图示例。这一线形图显示上月每天进入服务中心的服务请求的数量。
要创建上面带时间轴的线形图,请完成以下步骤:
1. 下载 SRDemo 模式。
2. 创建新的 Fusion Web Application.
3. 在 Model 项目中,创建新的 View 对象,命名为“Master”,使用以下 SQL 查询返回每天的服务请求数量:
select trunc(request_date) "Incident Date", count(svr_id) "Num SRs Opened" from service_requests group by trunc(request_date) order by trunc(request_date)
4. 在 ViewController 项目中,创建一个新 JSPX 页面。选择在您的页面上名为 SampleGraph 的管理 bean 中公开 UI 组件。您要使用管理 bean 创建时间选择器监听器方法。
5. 将数据控件 Master 拖放到页面上,选择创建 Advanced 图形。在 Graph Binding 对话框中,针对 Numeric Value 选择选择显示 NumSrsOpened,针对 Group Attribute 选择 IncidentDate。
1. 在 Property Inspector 中,在 Common 属性下,将 Graph 类型更改为 Line(“LINE_VERT_ABS”)。
2. 在 Appearance 下,在 Style 部分将图形样式更改为 Comet,在 Image 将图像格式更改为 Flash。
3. 要在图形上显示曲线,从 Component Palette -> ADF Data Visualization -> Graph -> General 选项卡中插入标记 dvt:seriesSet 作为 dvt:graph 标记的子项。使用 Property Inspector,将默认的标记类型更改为 MT_CURVE_LINE。
4. 要更改线的系列颜色,插入 dvt:series 标记作为 dvt:seriesSet 标记的子项。使用 Property Inspector,将系列的颜色更改为 #FDB026。
5. 要在底部显示图例,从 Component Palette -> ADF Data Visualization -> Graph -> General 插入 dvt:legendArea 标记。使用 Property Inspector 将位置属性设为 LAP_BOTTOM。
1. 将 dvt:timeSelector 标记插入为 dvt:graph 标记的子项。使用 Property Inspector,指定 dvt:timeSelector 标记的以下属性:
<dvt:timeSelector id="timeSelector1"
mode="EXPLICIT"
explicitStart="#{sampleGraph.startDate}"
explicitEnd="#{sampleGraph.endDate}"
borderColor="#313675"
fillColor="#33FFFFFF"/>
2. 使用 Property Inspector 设置以下属性,向图形中添加时间选择器:
timeSelectorListener="#{sampleGraph.processTimeSelector}"
这里提供了主图形的完整代码:
<dvt:graph id="master" graphType="LINE_VERT_ABS"
value="#{bindings.master1Graph.graphModel}"
stylePath="Comet" imageFormat="FLASH"
timeSelectorListener="#{sampleGraph.processTimeSelector}">
<dvt:timeSelector id="timeSelector1"
mode="EXPLICIT"
explicitStart="#{sampleGraph.startDate}"
explicitEnd="#{sampleGraph.endDate}"
borderColor="#313675"
fillColor="#33FFFFFF"/>
<dvt:legendArea position="LAP_BOTTOM"/>
<dvt:seriesSet defaultMarkerType="MT_CURVE_LINE">
<dvt:series id="0" color="#FDB026"/>
</dvt:seriesSet>
</dvt:graph>
1. 在 Model 项目中,创建一个新 View 对象,命名为“SRsByProduct”,使用以下 SQL 查询根据给定时间段中突发事件数量返回排名前 5 的商品名:
select * from (select products.name "Product", count(products.prod_id) "Num Incidents" from products
join service_requests on products.prod_id = service_requests.prod_id
where service_requests.request_date >= :start_date and service_requests.request_date <= :end_date
group by products.name order by count(products.prod_id) desc) where rownum < 6
定义 start_date 和 end_date 作为 Date 类型的变量。
将数据控件 SRsByDate 拖放到页面上,选择创建 Pie 图形。
3. 在 Graph Binding 对话框,针对 Numeric Value 选择显示 NumIncidents,针对 Group Attribute 选择 Product。
详图是一个饼图,它基于服务事件的数量显示 5 大产品。
1. 要创建第一个扇形以突出显示服务请求最多的产品,将 dvt:seriesSet 拖入页面作为 dvt:pieGraph 的子项。将 dvt:series 标记拖入页面作为 dvt:seriesSet 的子项。使用 Property Inspector,将 pieSliceExplode 属性设为 100。
2. 使用 Property Inspector,将饼图的 threeDEffect 设为 True,imageFormat 设为 FLASH,tylePath 设为 Comet。将 partialTriggers 属性设为“master”,Master 图的 ID。
3. 从 Component Palette 的 ADF Data Visualization -> Graph -> Graph Type-Specific 下,插入 dvt:sliceLabel 标记作为 dvt:pieGraph 标记的子项。使用 Property Inspector,将 textType 更改为 LD_TEXT。这将确保扇形标签将显示产品名称而不是百分比值(默认)。
4. 从 Component Palette 的 ADF Data Visualization -> Shared Child Tags 下,插入 dvt:numberFormat 标记作为 dvt:sliceLabel 标记的子项。使用 Property Inspector,将 decimalDigit 属性设为 0。
5. 从 Component Palette 的 ADF Data Visualization -> Graph -> General 下,插入 dvt:legendArea 标记作为 dvt:pieGraph 标记的子项。将渲染属性设为“false”。
详图形应如下所示:
这里提供了详图的完整代码:
<dvt:pieGraph id="pieGraph" stylePath="Comet"
imageFormat="FLASH" threeDEffect="true"
value="#{bindings.SRsByProduct1.graphModel}"
partialTriggers="master">
<dvt:seriesSet>
<dvt:series id="0" pieSliceExplode="100"/>
</dvt:seriesSet>
<dvt:sliceLabel textType="LD_TEXT">
<dvt:numberFormat decimalDigit="0"/>
</dvt:sliceLabel>
<dvt:legendArea rendered="false"/>
</dvt:graph>
当时间选择器窗口移至主图上时,时间选择器监听器将接收事件,将新的起始和终止日期传送至详图,并执行详图绑定以获取新数据。要创建时间选择器监听器,添加以下代码至辅助 bean SampleGraph.java:
public void processTimeSelector(TimeSelectorEvent event) throws AbortProcessingException
{
Date sdate = new Date(event.getStartTime());
Date edate = new Date(event.getEndTime());
oracle.jbo.domain.Date startDate = new oracle.jbo.domain.Date(sdate );
oracle.jbo.domain.Date endDate = new oracle.jbo.domain.Date(edate);
JUCtrlAttrsBinding sd = (JUCtrlAttrsBinding)_bindings.get("start_date");
JUCtrlAttrsBinding ed = (JUCtrlAttrsBinding)_bindings.get("end_date");
sd.setInputValue(startDate);
ed.setInputValue(endDate);
try {
JUCtrlActionBinding actionBinding = (JUCtrlActionBinding) _bindings.get("ExecuteWithParams1");
actionBinding.execute();
}
catch(Exception e) {
System.out.println("Error executing the binding with new dates: " + e);
}
}
应用程序通常要跟踪用户是否点击了图形系列,并根据点击的位置来执行动作。
1. 要为图形点击事件创建监听器,请在应用程序的辅助 bean 中(如以上使用的 SampleGraph.java 示例)添加以下方法:
public void processClick(ClickEvent event)
{
ComponentHandle handle = event.getComponentHandle();
if (handle instanceof DataComponentHandle)
{
DataComponentHandle dhandle = (DataComponentHandle)handle;
// Get the value displayed in the series
System.out.println("Value: " + dhandle.getValue(DataComponentHandle.UNFORMATTED_VALUE));
// Get the series attributes
Attributes [] seriesInfo = dhandle.getSeriesAttributes();
if(seriesInfo != null)
{
for(Attributes attrs: seriesInfo)
{
System.out.println("Series value: " + attrs.getValue(Attributes.LABEL_VALUE));
System.out.println("Series name: " + attrs.getValue(Attributes.LABEL_ATTRIBUTE));
System.out.println("Series value id: " + attrs.getValue(Attributes.ID_VALUE));
System.out.println("Series name id: " + attrs.getValue(Attributes.ID_ATTRIBUTE));
}
}
// Get the group attributes
Attributes [] groupInfo = dhandle.getGroupAttributes();
if(groupInfo != null)
{
for(Attributes attrs: groupInfo)
{
System.out.println("Group value: " + attrs.getValue(Attributes.LABEL_VALUE));
System.out.println("Group name: " + attrs.getValue(Attributes.LABEL_ATTRIBUTE));
}
}
}
}
2. 设置图形标记上的点击监听器:
clickListener="#{sampleGraph.processClick}"
要在运行时更改图形类型,可使用高级图形,将 graphType 属性绑定到辅助 bean。然后在运行时可以使用任何 ADF Faces UI 控件更改图形类型属性。
1. 按上面“创建主图”中的步骤从 Data Control 面板创建图形。
2. 将 graphType 属性绑定到辅助 bean,如下所示:
graphType="#{sampleGraph.graphType}"
3. 在图上将 partialTriggerts 属性设定为在运行时控制图形类型的 UI 控件的 ID:
partialTriggers="graphTypeChoice"
3. 图形代码应如下所示:
<dvt:graph id="graph1"
value="#{bindings.master1.graphModel}"
graphType="#{sampleGraph.graphType}"
partialTriggers="graphTypeChoice" />
4. 图形类型可由任何 UI 控件控制。在本示例中我们将使用一个简单的选择控件。
从 Component Palette -> ADF Faces 插入 af:selectOneChoice 组件到页面。将 autoSubmit 属性设为“true”,将 id 属性设为“graphTypeChoice”。为 af:selectOneChoice 创建以下标签/值选项:
af:selectOneChoice 的代码应如下所示:
<af:selectOneChoice label="Graph Type" value="#{sampleGraph.graphType}"
autoSubmit="true" id="graphTypeChoice">
<af:selectItem label="Vertical Bar" value="BAR_VERT_CLUST"/>
<af:selectItem label="Line" value="LINE_VERT_ABS"/>
<af:selectItem label="Area" value="AREA_VERT_ABS"/>
<af:selectItem label="Horizontal Bar" value="BAR_HORIZ_CLUST"/>
</af:selectOneChoice>
5. 在辅助 bean SampleGraph.java 中,添加 graphType 属性的访问器方法,如下所示:
public String getGraphType() {
return m_graphType;
}
public void setGraphType(String type) {
m_graphType = type;
}
String m_graphType;
6. 运行页面,使用选择控件在运行时更改图形类型:
要了解更多使用数据可视化组件的信息,请参阅针对 Oracle ADF 的 Fusion 开发人员指南中的章节“创建数据绑定图、计量器、数据透视表、地图以及甘特图”、ADF Faces 组件指南中的章节“使用数据可视化组件”以及本文“入门”部分中列出的其他资源。