gpt4 book ai didi

jsf - 提交新请求时 primefaces 图表不更新

转载 作者:行者123 更新时间:2023-12-04 06:14:14 24 4
gpt4 key购买 nike

我提交了数据并显示了一个图表但是当我再次通过在表单中​​插入新值来提交它时,图表不会自行更新。我看到的另一件事是当我刷新页面然后它更新图表和图表显示新值。
例如,如果我给值
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();

}

最佳答案

更改模型值后图表不会自行更新,但您可以通过 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);
}

关于jsf - 提交新请求时 primefaces 图表不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com