0

我有一个检票口页面,其中包含一个使用BreadCrumbBar(org.apache.wicket.extensions.breadcrumb)的数据面板。如果我下降一个级别,则会自动添加新的面包屑并刷新数据面板。如果我单击以前的面包屑之一,我的数据面板会正确更新。现在我想确保页面上的一些额外组件(标题)也得到更新。当我自己控制链接时,这很好用,但对于面包屑链接,我没有完全控制权。

有没有一种方法BreadCrumbBar可以让我重载以添加要刷新的额外组件?我假设 ajax 链接中的链接,但我在(或任何子组件)BreadCrumbBar中找不到 ajax 目标。BreadCrumbBar

4

2 回答 2

3

默认情况下,BreadCrumbBar使用BreadCrumbLinks 来呈现其链接,这是通常Link的 s(而不是AjaxLinks)。

要获得 ajax 行为,您可以尝试创建自己的 link( BreadCrumbAjaxLink) 实现,并使用's中存在的相同逻辑来AjaxLink实现。onClick(AjaxRequestTarget)BreadCrumbLinkonClick()

然后使用 yourBreadCrumbComponent而不是.AjaxBreadCrumbComponentBreadCrumbAjaxLinkBreadCrumbLink

然后覆盖BreadCrumbBarnewBreadCrumbComponent()方法:

protected Component newBreadCrumbComponent(final String id, final long index, final int total,
    final IBreadCrumbParticipant breadCrumbParticipant)
{
    boolean enableLink = getEnableLinkToCurrent() || (index < (total - 1));
    return new AjaxBreadCrumbComponent(id, getSeparatorMarkup(), index, this,
        breadCrumbParticipant, enableLink);
}

BreadCrumbAjaxLink中,您可以更新任何您想要的附加组件。(您可能也需要更新栏本身)。

于 2018-03-12T18:10:37.983 回答
1

由于扩展几个类对于我的用例来说似乎有点矫枉过正,我尝试了一些不同的方法,最终奏效了。

通过重载 I 的setActive方法,BreadCrumbBar可以为页面标题模型设置一些文本。然后该文本显示在页面上。

我仍然不确定如何BreadCrumbBar处理这个。我认为整个页面都被刷新了,并且没有完成 ajax 调用。

于 2018-03-13T08:43:26.787 回答