是否有BreadCrumbBar的方法我可以重载以添加要刷新的额外组件吗?

时间:2018-03-12 14:56:50

标签: java apache wicket wicket-7

我有一个wicket页面,其中包含一个使用BreadCrumbBar(org.apache.wicket.extensions.breadcrumb)的数据面板。如果我向下移动一个级别,则会自动添加新的痕迹并刷新数据面板。如果我点击之前的一个面包屑,我的数据面板会正确更新。现在我想确保页面上的一些额外组件(标题)也得到更新。我自己控制链接时工作正常,但对于面包屑链接我没有完全控制。

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

2 个答案:

答案 0 :(得分:3)

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

要获得ajax行为,您可以尝试使用BreadCrumbAjaxLink作为基础创建自己的链接(AjaxLink)实现,并在onClick(AjaxRequestTarget)中实现BreadCrumbLink中存在的相同逻辑1}} onClick()

然后使用BreadCrumbComponent代替AjaxBreadCrumbComponent创建BreadCrumbAjaxLink(我们称之为BreadCrumbLink)的模拟。

然后覆盖BreadCrumbBar的{​​{1}}方法:

newBreadCrumbComponent()

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); } 中,您可以更新所需的任何其他组件。 (您可能还需要更新栏本身。)

答案 1 :(得分:1)

由于扩展了几个类似乎对我的用例有点过分,我尝试了一些最终有用的东西。

通过重载setActive的{​​{1}}方法,我可以将一些文本设置为页面标题模型。该文本随后显示在页面上。

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