【问题标题】:Is there a method of BreadCrumbBar I can overload to add an extra Component to be refreshed?是否有一种 BreadCrumbBar 方法可以重载以添加要刷新的额外组件?
【发布时间】:2018-03-12 14:56:49
【问题描述】:

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

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

【问题讨论】:

    标签: java apache wicket wicket-7


    【解决方案1】:

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

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

    然后使用您的BreadCrumbAjaxLink 而不是BreadCrumbLink 创建BreadCrumbComponent 的类似物(我们称之为AjaxBreadCrumbComponent)。

    然后覆盖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 中,您可以更新任何您想要的附加组件。 (您可能还需要更新栏本身)。

    【讨论】:

    • 感谢您的回答。我曾考虑过这样做,但仅更新页面标题似乎有点多。这使您能够随时更改任何内容,因此更加灵活。如有必要,我可以删除我的修补程序并使用它:-)
    【解决方案2】:

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

    通过重载BreadCrumbBarsetActive 方法,我可以为页面标题模型设置一些文本。该文本随后显示在页面上。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2014-09-04
      • 2012-07-08
      • 2022-12-04
      • 1970-01-01
      相关资源
      最近更新 更多