【问题标题】:Is it possible/how to display a message on the FeedbackPanel more than one time是否可以/如何在反馈面板上多次显示消息
【发布时间】:2019-07-02 09:21:22
【问题描述】:

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

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

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

我已经通过覆盖面板的 onBeforeRender 方法做到了

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

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

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

【问题讨论】:

    标签: wicket wicket-7


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多