【问题标题】:Wicket: ShieldUI Chart disappear on update检票口:ShieldUI 图表在更新时消失
【发布时间】:2018-01-16 23:36:36
【问题描述】:

我目前遇到与图表有关的 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 并使用更新的数据集创建 new 图表实例时,图表都会消失,而 html 元素呈现为完全空的 div。

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

【问题讨论】:

  • 请注意,在上面的示例中,我使用了 item.addOrReplace()。我也用简单的 .add() 尝试过,但也没有用。
  • 你是否使用一些javascript来初始化图表的绘制?
  • 不是直接的。如果有,那么它将被隐藏在页面加载时运行的 JQuery javascript 代码中。
  • 您的列表视图是用 ajax 重新渲染,还是正常的页面重新加载?
  • 当我使用 Ajax 重新渲染时,通过将 ListView 的父组件添加到 AjaxRequestTarget 会出现问题。

标签: java charts wicket wicket-6 shieldui


【解决方案1】:

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

当一个 Ajax 请求进来时,可以调用:

wicketChart.reInitialize(ajaxRequestTarget); 

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

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

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多