Wicket:ShieldUI 图表在更新时消失

Wicket: ShieldUI Chart disappear on update

我目前遇到关于图表的 Wicket/ShieldUI 组合的问题。

在页面初始化时,图表显示良好(即第一次呈现)。这些图表作为 ListView 的一部分呈现。

我需要能够更新这些图表中的数据并重新绘制。到目前为止,我已经通过两种方式解决了这个问题,但没有成功解决我的问题。

问题是,当通过 Ajax 调用重新呈现 the/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 扩展面板)。

所以,ListView 第一次填充和创建图表时,一切都很好。任何后续的 ListView 填充和 new 图表实例使用更新的数据集创建时,图表消失,留下 html 元素呈现为完全空的 div。

有没有人知道如何避免我的图表被遗忘?

虽然我无法使用 ListView 方法来完成这项工作(因为我有点懒),但我找到了解决方案。

收到 Ajax 请求后,可以调用:

wicketChart.reInitialize(ajaxRequestTarget); 

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

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