是否possible/how在FeedbackPanel上多次显示一条消息

Is it possible/how to display a message on the FeedbackPanel more than one time

我的面板 A class 中有一个 org.apache.wicket.markup.html.panel.FeedbackPanel。反馈面板在 panelA 构造函数中实例化,其中显示一条消息 -> feedbackPanel.info("displayFirstTime")。我正在导航到一个新页面,然后使用命令

导航到上一个 panelA
target.getPage().get(BasePage.CONTENT_PANEL_ID).replaceWith(panelA);

但消息 "displayFirstTime" 将不会再次显示在反馈面板上。

我已经通过重写面板 onBeforeRender 方法做到了

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

但这不是一个干净的解决方案。

是否可以或如何实现,当第 2 次移动到 panelA 页面时,反馈消息也会显示?

Wicket 使用 application.getApplicationSettings().getFeedbackMessageCleanupFilter() 在请求周期结束时删除反馈消息。

默认情况下,它将删除所有 already rendered 条消息。

您可以 setup 自定义清理过滤器,它可能会留下一些消息,例如如果他们实现了一些接口。例如:

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!