【发布时间】: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