33.18. <g:movingAverage>

在某些情况下,用户并不关心大部分的数据,他们需要的是一段时间内数据的平均数据,通过这些数据评估未来走势。MovingAverage构件完成的就是这个功能,它包含在某个TimeDataItem构件中,根据这个TimeDataItem的数据绘制出这些数据某一段时间内的平均走势。

33.18.1. 构件信息

表 33.50. 构件信息

Component Typeorg.operamasks.faces.graph.AverageLine
Component Familyorg.operamasks.faces.graph.Curve
Component Classorg.operamasks.faces.component.graph.UIAverageLine
Tag Classorg.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.18.2. 属性

表 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)
是否必须 延时求值
指定构件从第几个数据开始统计,开始统计之前的数据将被忽略

33.18.3. 构件API

33.18.4. 示例

以下的例子介绍了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>