我目前在图表方面遇到Wicket / ShieldUI组合问题。
在页面初始化时,图表显示正常(即第一次渲染图表)。这些图表将作为ListView的一部分呈现。
我需要能够更新这些图表中的数据并重绘。到目前为止,我已经以两种方式解决了这个问题,并没有成功解决我的问题。
问题在于,当通过Ajax调用重新呈现/ a图表时,它会消失,实际上没有在页面加载时通过Shield UI js发生的voodoo处理。
在我的应用程序中,图表由配置定义。这些配置是列表视图的驱动程序。配置包含对数据集合和图表的引用,在创建时使用它。
我的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。
有没有人知道如何保存我的图表不被遗忘?
答案 0 :(得分:1)
虽然我没有设法使用ListView方法(因为我有点懒惰),但我找到了解决方案。
在收到Ajax请求后,可以致电:
wicketChart.reInitialize(ajaxRequestTarget);
并且图表将使用它现在包含的数据重新绘制。
reInitialize方法是WidgetComponentBase类的一部分,所以我希望这可能是用于其他Wicket组件的解决方案。