提交新请求时,primefaces图表未更新 [英] primefaces charts not updating when submit a new request
问题描述
我提交数据并显示一个图表,但是再次通过在表单中插入新值提交数据时,图表本身不会更新.我看到的另一件事是,当我刷新页面时,它会使用显示新值.
例如,如果我给出值
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屋!