2

データを送信するとグラフが表示されましたが、フォームに新しい値を挿入して送信すると、グラフが更新されません。ページを更新すると、グラフとグラフが新しい値で更新されます。画面。
たとえば、
Wheat=40Sugar=60
の値を指定して送信すると、グラフが表示されます。Wheat=90Sugar=10
を送信すると、ページに古いグラフが残っているだけで表示されます。ページを更新すると、値が更新されたグラフが利用できるようになります。どうすればその問題を取り除くことができますか:(誰かが持っている場合は解決策を提案してください。これ が私のコードチャートコードです



<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();

    }
4

2 に答える 2

4

モデル値を変更した後、グラフは更新されませんがupdate、ajax を使用して更新できます。たとえば、チャートがある場合:

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

バッキング Bean に新しい値を送信する selecteOneMenu で、バッキング 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()メソッドはチャート モデルを更新することを目的としています。

public void refreshChart() {
    buildChart();
} 

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

    ChartSeries series1 = new ChartSeries();
    ...

    ChartSeries series2 = new ChartSeries();
    ...

    categoryModel.addSeries(series1);
    categoryModel.addSeries(series2);
}
于 2012-10-17T07:31:41.613 に答える
2

ページが読み込まれるとチャートが表示されるはずです...その後、すべての ajax リクエストがチャートを適切にレンダリングします。これを行うには、ページの読み込み時にシリーズ 1 の場合は (0,0)、シリーズ 2 の場合は (0,0) のようなダミーのシリーズ データを提供するだけで、その後はすべて正常に動作します。

于 2012-12-30T02:06:00.077 に答える