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