0

我的 panelA 类中有一个 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");
    }
}

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

是否有可能或如何做到这一点,当第二次移动到 panelA 页面时,也会显示反馈消息?

4

1 回答 1

2

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

于 2019-07-02T10:25:53.993 回答