我目前在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组件的解决方案。

09-10 08:18
查看更多