Wicket:ShieldUI图表在更新时消失

时间:2017-08-09 07:47:28

标签: java charts wicket wicket-6 shieldui

我目前在图表方面遇到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。

有没有人知道如何保存我的图表不被遗忘?

1 个答案:

答案 0 :(得分:1)

虽然我没有设法使用ListView方法(因为我有点懒惰),但我找到了解决方案。

在收到Ajax请求后,可以致电:

wicketChart.reInitialize(ajaxRequestTarget); 

并且图表将使用它现在包含的数据重新绘制。

reInitialize方法是WidgetComponentBase类的一部分,所以我希望这可能是用于其他Wicket组件的解决方案。