我有一个JSF应用程序,其中
重绘图表的正确方法是什么?
目前,我在托管bean中有以下代码,它处理按钮按下事件:
public void simulateYearButtonAction()
{
// Update other UI elements here
this.updateChart();
}
private void updateBirthsChart() {
final FacesContext context = FacesContext.getCurrentInstance();
final ChartBean bean =
(ChartBean) context.getApplication().evaluateExpressionGet(
context, "#{chartBean}", ChartBean.class);
final DataStore dataStore = (DataStore)this.simulationFacade;
bean.addBirthsData(this.year-1, dataStore.getValue(DataStoreValueType.BIRTHS_LAST_YEAR));
}
在ChartBean
中,我将新数据项添加到图表系列
public ChartBean() {
createCategoryModel();
}
private void createCategoryModel() {
categoryModel = new CartesianChartModel();
birthsSeries = new ChartSeries();
birthsSeries.setLabel("Рождения");
birthsSeries.set(2012, 0);
categoryModel.addSeries(birthsSeries);
}
public void addBirthsData(final int aYear, final double aNumberOfBirths) {
this.birthsSeries.set(aYear, aNumberOfBirths);
}
该页面以这种方式使用ChartBean
:
<p:lineChart id="category" value="#{chartBean.categoryModel}"
legendPosition="e" title="Демографическая динамика" minX="2012" maxX="2112"
style="height:300px;margin-top:20px" />
我不知道如何告诉图表它应该立即更新(并显示新数据)。
答案 0 :(得分:1)
按下按钮时,将调用backing bean方法,这将重建您的图表。通过包含update="category"
操作完成后,您的图表将会更新:
<p:commandButton actionListener=#{chartBean.refreshCategoryModel()}
update="category"/>
在你的支持bean中:
public void refreshCategoryModel() {
createCategoryModel();
}
private void createCategoryModel() {
categoryModel = new CartesianChartModel();
birthsSeries = new ChartSeries();
birthsSeries.setLabel("Рождения");
birthsSeries.set(2012, 0);
categoryModel.addSeries(birthsSeries);
}
新生成的图表可能取决于某些动态值。拨打process
时,请不要忘记<p:commandButton/>
这些组件。
您可能会发现以下帖子https://stackoverflow.com/a/12929296/407466很有用。