是否可以/如何多次在FeedbackPanel上显示一条消息

时间:2019-07-02 09:21:22

标签: wicket wicket-7

我的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页面时,还会显示反馈消息?

1 个答案:

答案 0 :(得分:2)

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