Question

Primefaces comes with chart components. I try to update the chart through a push action, using the Atmosphere/push framework.

The xhtml:

<h:body>
    <p:panel id="panel">
        <p:lineChart id="category" value="#{beanViz.categoryModel}" legendPosition="e"
                     title="Category Chart" minY="0" maxY="200" style="height:300px;margin-top:20px"/>

</p:panel>
<h:form>
    <p:commandButton value="Update" actionListener="#{beanViz.update()}"></p:commandButton>
</h:form>
<p:socket onMessage="handleMessage" channel="/counter" />

The code in beanViz to create the line chart:

int increment = 0;
private CartesianChartModel categoryModel;
public CartesianChartModel getCategoryModel() {
    return categoryModel;
}

private void createCategoryModel() {
    categoryModel = new CartesianChartModel();
    ChartSeries boys = new ChartSeries();
    boys.setLabel("Boys");
    boys.set("2004", 120 + increment);
    boys.set("2005", 100);
    boys.set("2006", 44);
    boys.set("2007", 150);
    boys.set("2008", 25);
    categoryModel.addSeries(boys);
}

Now, a commandButton on the same page as the chart triggers the update of one value in the chart at one second intervals:

public void update() {
    for (int i = 0; i < 50; i = i+5) {
        increment = increment + i;
        createCategoryModel();
        PushContext pushContext = PushContextFactory.getDefault().getPushContext();
        pushContext.push("/counter", "");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            Logger.getLogger(BeanViz.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Problem: it doesn't update the values of the chart as it should, and I am not sure at all this is the correct way to proceed. Any help?

Was it helpful?

Solution

recently implemented in primefaces showcase http://www.primefaces.org/showcase-labs/push/chart.jsf

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top