Возможно ли / как отобразить сообщение на панели обратной связи более одного раза - PullRequest
0 голосов
/ 02 июля 2019

У меня есть org.apache.wicket.markup.html.panel.FeedbackPanel в моем классе PanelA.Панель обратной связи создается в конструкторе panelA с одним отображаемым сообщением -> feedbackPanel.info ("displayFirstTime").Я перехожу на новую страницу, а затем на предыдущую панель A с помощью команды

target.getPage().get(BasePage.CONTENT_PANEL_ID).replaceWith(panelA);

, но сообщение «displayFirstTime» больше не будет отображаться на панели обратной связи.

У меня естьсделал это с переопределением панели на метод BeforeRender

@Override
public void onBeforeRender() {      
    super.onBeforeRender();
    if (again_displayCondition) {
       this.info("displayFirstTime");
    }
}

, но это не чистое решение.

Возможно или как это сделать, что при переходе на страницу панели 2 во второй разсообщение обратной связи также будет отображаться?

1 Ответ

2 голосов
/ 02 июля 2019

Wicket использует application.getApplicationSettings().getFeedbackMessageCleanupFilter() для удаления сообщений обратной связи в конце цикла запроса.

По умолчанию удаляются все уже обработанных сообщений.

Вы можете настроить специальный фильтр очистки, который может оставлять некоторые сообщения, например, если они реализуют какой-то интерфейс. Например:

component.info(new DoNotDeleteMe("The actual message here."));

и ваш фильтр должен будет проверить:

@Override
public boolean accept(FeedbackMessage message)
{
    if (message.getMessage() instanceOf DoNotDeleteMe) {
      return false;
    }

    return message.isRendered();
}

Убедитесь, что вы внедрили DoNotDeleteMe#toString(), чтобы он правильно отображался. Или вам придется использовать пользовательский FeedbackPanel тоже.

DoNotDeleteMe должен реализовать java.io.Serializable!

...