Есть ли способ BreadCrumbBar, который я могу перегрузить, чтобы добавить дополнительный компонент для обновления?

114
7

У меня есть страница калитки с панелью данных, которая использует BreadCrumbBar (org.apache.wicket.extensions.breadcrumb). Если я спускаюсь на уровень, автоматически добавляется новая пачка, и панель данных обновляется. Если я нажму на одну из предыдущих панировок, моя панель данных будет обновлена правильно. Теперь я хочу убедиться, что дополнительный компонент на странице (заголовок) также обновляется. Это отлично работает, когда я сам управляю ссылкой, но для ссылок на канал я не имею полного контроля.

Есть ли способ BreadCrumbBar я могу перегрузить, чтобы добавить дополнительный компонент для обновления? Я предполагаю, что ссылки в BreadCrumbBar являются ajax-ссылками, но я не могу найти цель ajax в BreadCrumbBar (или любой из дочерних компонентов).

спросил(а) 2018-03-12T17:56:00+03:00 3 года, 1 месяц назад
1
Решение
87

По умолчанию BreadCrumbBar использует BreadCrumbLink для отображения своих ссылок, которые обычно являются Link (а не AjaxLink s).

Чтобы получить поведение ajax, вы можете попытаться создать свою собственную реализацию (BreadCrumbAjaxLink) с использованием AjaxLink в качестве базы и реализовать в onClick(AjaxRequestTarget) ту же логику, которая существует в BreadCrumbLink onClick().

Затем создайте аналог BreadCrumbComponent (позвоните ему AjaxBreadCrumbComponent), используя ваш BreadCrumbAjaxLink вместо BreadCrumbLink.

И затем переопределите BreadCrumbBar 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);
}

В BreadCrumbAjaxLink вы можете обновить любой необходимый компонент. (Вам, вероятно, потребуется также обновить панель).

ответил(а) 2018-03-12T21:10:00+03:00 3 года, 1 месяц назад
62

Так как расширение нескольких классов показалось немного излишним для моего случая использования, я попробовал что-то другое, что в конечном итоге сработало.

setActive метод setActive для BreadCrumbBar я мог бы установить некоторый текст в модель заголовка страницы. Затем этот текст был показан на странице.


Я до сих пор не знаю, как это BreadCrumbBar с BreadCrumbBar. Я думаю, что вся страница обновлена, а вызов ajax не выполняется.

ответил(а) 2018-03-13T11:43:00+03:00 3 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема