提交新请求时,primefaces图表未更新 [英] primefaces charts not updating when submit a new request

查看:108
本文介绍了提交新请求时,primefaces图表未更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我提交数据并显示一个图表,但是再次通过在表单中​​插入新值提交数据时,图表本身不会更新.我看到的另一件事是,当我刷新页面时,它会使用显示新值.
例如,如果我给出值
Wheat = 40 Sugar = 60
并提交,它将显示图表.
现在,当我提交了 Wheat = 90 Sugar = 10 ,它什么也没有显示,但是页面上仍然存在旧图表.
现在,如果我刷新页面,则该图表
如何摆脱这个问题:(如果有的话,请提出一种解决方案.
这是我的代码
图表代码

I submit data and a chart has been displayed But again when I submit it by inserting new values in form,chart doesn't update itself.Another thing I saw is when I refresh the page then it update the chart and chart with new values get display.
For instance If I give values
Wheat=40 and Sugar=60
and submit , It will display the chart.
Now when I submit Wheat=90 and Sugar=10 , it displays nothing but the old chart remain present on the page.
Now If I refresh the page , The chart with updated values will be availabe.
How can I get rid of that problem :( Please suggest a solution if any one have.
Here is my code
Chart Code

<p:barChart id="horizontal"
                        value="#{reportingCharts.categoryModel}" legendPosition="se"
                        style="width:635px;height:500px" title="Horizontal Bar Chart"
                        orientation="horizontal" min="0" max="150" animate="true"
                        zoom="true" barMargin="90"
                        rendered="#{chartsRendering.barCharts}" showDatatip="true" shadow="true" />

按钮代码

<h:commandButton id="btnLanguage" action="#{reportingCharts.getGraphValuesOnLanguageBasis}"
                                value="Plot Chart Language">
                                </h:commandButton>

getGraphValuesOnLanbguageBasis方法

public void getGraphValuesOnLanguageBasis() {

        categoryModel = null;


            resList = (ArrayList<ChartResult>) serviceObj
                .getChartByLanguage(ranks, language);

        if (chartType.equalsIgnoreCase("bar")
                || chartType.equalsIgnoreCase("line")
                || chartType.equalsIgnoreCase("column")) {

            categoryModel = new CartesianChartModel();

            ChartSeries langChart = null;


            for (int a = 0; a < ranks.length; a++) {

                langChart = new ChartSeries();
                if(a == 0){
                    for(int z=0;z<language.length;z++){

                        langChart.set(languageMap.get(Integer.parseInt(language[z])),0);

                    }
                    }

                String rank = "";
                boolean rankAvailable = false;
                for (int x = 0; x < resList.size(); x++) {

                    if(Integer.parseInt(resList.get(x).getRankId()) == Integer.parseInt(ranks[a])){
                        rank = resList.get(x).getRankName();

                        x = resList.size();
                        rankAvailable = true;

                    }
                }


                if(rankAvailable == false){

                    langChart.setLabel(rankMap.get(Integer.parseInt(ranks[a])));

                }
                else{

                    langChart.setLabel(rank);
                }


                for (int x = 0; x < resList.size(); x++) {


                    if (Integer.parseInt(resList.get(x).getRankId()) == Integer
                            .parseInt(ranks[a]) && rankAvailable == true) {

                                                langChart.set(languageMap.get(Integer.parseInt(resList.get(x).getCriteria())), Integer
                                .parseInt(resList.get(x).getNoOfPersons()));


                    }

                }

                categoryModel.addSeries(langChart);

            }

        } else if (chartType.equalsIgnoreCase("pie")) {



                pieModel = new PieChartModel();


                for (int x = 0; x < resList.size(); x++) {

                        pieModel.set(languageMap.get(Integer.parseInt(resList.get(x).getCriteria())), Integer
                                .parseInt(resList.get(x).getNoOfPersons()));

                }

        }
        ChartsRendering chartRenderer1 = (ChartsRendering) FacesContext
                .getCurrentInstance().getExternalContext().getSessionMap()
                .get("chartsRendering");


        if (chartType.equalsIgnoreCase("bar")) {
            chartRenderer1.showBarChart();

        } else if (chartType.equalsIgnoreCase("line"))
            chartRenderer1.showLineChart();
        else if (chartType.equalsIgnoreCase("column"))
            chartRenderer1.showColumnChart();
        else if (chartType.equalsIgnoreCase("pie"))
            chartRenderer1.showPieChart();

    }

推荐答案

更改模型值后,图表不会自动更新,但是可以通过ajax update对其进行更新.例如,如果您有一个图表:

The chart won't update itself after you change the model values but you can update it through ajax. For example if you have a chart:

<p:barChart id="myBarChart" value=#{yourChartBean.chartModel} ..../>

和一个将新值发送到后备bean的selecteOneMenu,定义一个将更新后备bean中的模型的方法:

and a selecteOneMenu which sends new values to your backing bean, define a method which will update the model in your backing bean:

<p:selectOneMenu id="aMenu" value="#{yourChartBean.menuValue}">
    <p:ajax event="change" update="myBarChart" listener="#{yourChartBean.refreshChart()}"/>
    <f:selectItem itemLabel="This value" itemValue="tv"/>
    <f:selectItem itemLabel="Another value" itemValue="av"/>
</p:selectOneMenu>

在这种情况下,refreshChart()方法用于更新图表模型:

in this case the refreshChart() method is intended to update your chart model:

public void refreshChart() {
    buildChart();
} 

private void buildChart() {
    chartModel = new CartesianChartModel();

    ChartSeries series1 = new ChartSeries();
    ...

    ChartSeries series2 = new ChartSeries();
    ...

    categoryModel.addSeries(series1);
    categoryModel.addSeries(series2);
}

这篇关于提交新请求时,primefaces图表未更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆