如何以编程方式更新JSF中的图表?

时间:2012-10-24 20:12:15

标签: java jsf primefaces

我有一个JSF应用程序,其中

  • 用户按下按钮,此后
  • 将新数据项添加到图表和
  • 应该重新绘制图表。

重绘图表的正确方法是什么?

目前,我在托管bean中有以下代码,它处理按钮按下事件:

public void simulateYearButtonAction() 
{
    // Update other UI elements here

    this.updateChart();
}

private void updateBirthsChart() {
    final FacesContext context = FacesContext.getCurrentInstance();
    final ChartBean bean =
            (ChartBean) context.getApplication().evaluateExpressionGet(
                    context, "#{chartBean}", ChartBean.class);
    final DataStore dataStore = (DataStore)this.simulationFacade;
    bean.addBirthsData(this.year-1, dataStore.getValue(DataStoreValueType.BIRTHS_LAST_YEAR));
}

ChartBean中,我将新数据项添加到图表系列

public ChartBean() {  
    createCategoryModel();  
}  
private void createCategoryModel() {  
    categoryModel = new CartesianChartModel();  

    birthsSeries = new ChartSeries();
    birthsSeries.setLabel("Рождения");

    birthsSeries.set(2012, 0);
    categoryModel.addSeries(birthsSeries);
}  

public void addBirthsData(final int aYear, final double aNumberOfBirths) {
    this.birthsSeries.set(aYear, aNumberOfBirths);
}

该页面以这种方式使用ChartBean

<p:lineChart id="category" value="#{chartBean.categoryModel}"
    legendPosition="e" title="Демографическая динамика" minX="2012" maxX="2112"
    style="height:300px;margin-top:20px" />

我不知道如何告诉图表它应该立即更新(并显示新数据)。

1 个答案:

答案 0 :(得分:1)

按下按钮时,将调用backing bean方法,这将重建您的图表。通过包含update="category"操作完成后,您的图表将会更新:

<p:commandButton actionListener=#{chartBean.refreshCategoryModel()}
                 update="category"/>

在你的支持bean中:

public void refreshCategoryModel() {
    createCategoryModel();
}

private void createCategoryModel() {  
    categoryModel = new CartesianChartModel();  

    birthsSeries = new ChartSeries();
    birthsSeries.setLabel("Рождения");

    birthsSeries.set(2012, 0);
    categoryModel.addSeries(birthsSeries);
}  

新生成的图表可能取决于某些动态值。拨打process时,请不要忘记<p:commandButton/>这些组件。

您可能会发现以下帖子https://stackoverflow.com/a/12929296/407466很有用。