在某些情况下,用户并不关心大部分的数据,他们需要的是一段时间内数据的平均数据,通过这些数据评估未来走势。MovingAverage构件完成的就是这个功能,它包含在某个TimeDataItem构件中,根据这个TimeDataItem的数据绘制出这些数据某一段时间内的平均走势。
表 33.50. 构件信息
| Component Type | org.operamasks.faces.graph.AverageLine |
| Component Family | org.operamasks.faces.graph.Curve |
| Component Class | org.operamasks.faces.component.graph.UIAverageLine |
| Tag Class | org.operamasks.faces.webapp.graph.MovingAverageTag |
+java.lang.Object
++javax.faces.component.UIComponent
+++javax.faces.component.UIComponentBase
++++org.operamasks.faces.component.graph.UICurve
+++++org.operamasks.faces.component.graph.UIAverageLine
表 33.51. 属性
| binding | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | javax.el.ValueExpression(javax.faces.component.UIComponent) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。 | ||||
| color | 定义类 | org.operamasks.faces.component.graph.UICurve | ||
| 类型 | javax.el.ValueExpression(java.lang.Object) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 指定构件描绘图形的颜色 | ||||
| id | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。 | ||||
| legend | 定义类 | org.operamasks.faces.component.graph.UICurve | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 指定与数据对应的图例 | ||||
| period | 定义类 | org.operamasks.faces.component.graph.UIAverageLine | ||
| 类型 | javax.el.ValueExpression(java.lang.Double) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 指定间隔多少步统计一次数据 | ||||
| rendered | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | boolean(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。 | ||||
| skip | 定义类 | org.operamasks.faces.component.graph.UIAverageLine | ||
| 类型 | javax.el.ValueExpression(java.lang.Double) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 指定构件从第几个数据开始统计,开始统计之前的数据将被忽略 | ||||
以下的例子介绍了g:movingAverage标签使用方法,首先创建托管Bean:
@ManagedBean(scope=ManagedBeanScope.SESSION)
public class TimeSeriesData extends ArrayList<TimeDataItem> {
public TimeSeriesData() {
randomize();
}
public void randomize() {
clear();
GregorianCalendar cal = new GregorianCalendar(2006, 0, 1);
double value = 100.0;
for (int i = 0; i < 365; i++) {
value = (value + Math.random()*10) - 5;
add(new TimeDataItem(cal.getTime(), value));
cal.add(Calendar.DATE, 1);
}
}
}以下是涉及g:movingAverage标签的页面代码,在这个例子中,g:timeDataItem标签包含了2个g:movingAverage标签,每个标签的时间间隔各不相同:
<g:lineChart title="Moving Average Demo" showLegend="true">
<g:timeSeries value="#{TimeSeriesData}" var="ts">
<g:timeDataItem legend="Sample" time="#{ts.time}" value="#{ts.value}">
<g:movingAverage legend="10 day PMA" period="10"/>
<g:movingAverage legend="30 day PMA" period="30"/>
</g:timeDataItem>
</g:timeSeries>
</g:lineChart>