我目前在Wicket / ShieldUI组合方面遇到关于图表的问题。
在页面初始化时,图表显示良好(即首次显示图表)。这些图表将作为ListView的一部分呈现。
我需要能够更新这些图表中的数据并重新绘制。到目前为止,我已经以两种方式解决了这个问题,但没有成功。
问题在于,当通过Ajax调用重新呈现/ a图表时,该图表消失了,实际上在页面加载时,通过Shield UI js发生的伏都没有有效地对其进行处理。
在我的应用程序中,图表是由配置定义的。这些配置是列表视图的驱动程序。使用此配置时,配置包含对数据收集和图表的引用。
下面是我onInitialize中创建的内容的简单代码示例。
final WebMarkupContainer visualizationContainer = new WebMarkupContainer(WICKET_ID_VIZ_CONTAINER);
chartConfigListView = new ListView<ChartConfig>(WICKET_ID_CHART_CONTAINER_LIST_VIEW, chartConfigList) {
@Override
protected void populateItem(ListItem<ChartConfig> item)
{
final ChartPanel chartPanel = new ChartPanel(WICKET_ID_CHART_THE_CHART, config);
chartPanel.setOutputMarkupId(true);
item.addOrReplace(chartPanel);
}
};
visualizationContainer.add(chartConfigListView);
ChartPanel的内部构件(onInitialize)实例化一个新的ShieldUI图表,并将其添加到ChartPanel组件中(ChartPanel扩展了Panel)。
因此,ListView第一次填充并创建图表时,一切都很好。在随后的每次ListView填充和使用更新的数据集创建新的图表实例时,图表都会消失,而将html元素呈现为完全空的div。
有谁知道如何保存图表而不被遗忘?
最佳答案
尽管我还没有设法使用ListView方法(因为有点懒),但我找到了解决方案。
收到Ajax请求后,可以调用:
wicketChart.reInitialize(ajaxRequestTarget);
图表将重新绘制其中包含的数据。
reInitialize方法是WidgetComponentBase类的一部分,因此我希望这可能是用于其他Wicket组件的解决方案。