wicket下载链接清除反馈面板

wicket下载链接清除反馈面板,wicket,Wicket,我有两个下拉列表和一个下载链接按钮。根据用户选择,我得到要下载的文件。如果用户没有选择,我会在反馈面板上显示错误。如果用户做出选择并点击下载链接,它工作正常,但之前的反馈信息仍然可见。我该如何清除它 单击下载链接后,我尝试了以下方法,但没有用 FeedbackMessages me = Session.get().getFeedbackMessages(); me.clear(); 可能是的 Session.get().cleanupFeedbackMessages() 即使它在Wicke

我有两个下拉列表和一个下载链接按钮。根据用户选择,我得到要下载的文件。如果用户没有选择,我会在反馈面板上显示错误。如果用户做出选择并点击下载链接,它工作正常,但之前的反馈信息仍然可见。我该如何清除它

单击下载链接后,我尝试了以下方法,但没有用

FeedbackMessages me = Session.get().getFeedbackMessages(); 
me.clear();
可能是的

Session.get().cleanupFeedbackMessages()
即使它在Wicket 6.x中被更改了,也可能是这样

Session.get().cleanupFeedbackMessages()

即使它在Wicket 6.x中被更改了,我也发现了这篇文章,我认为是时候分享Wicket 6.x和Wicket 7.x的方式了,因为
Session.get().cleanupFeedbackMessages()
已经被弃用了

要为Wicket 6.x实现这一点,您必须为反馈面板实现额外的过滤器。在哪里做,由你自己决定

通过扩展现有的
FeedbackPanel
类,创建一个新的FeedbackPanel实现

private class MessagesFeedbackPanel extends FeedbackPanel{

  private MessageFilter filter = new MessageFilter();

  public MessagesFeedbackPanel(String id){
    super(id);
    setFilter(filter);
  }


  @Override
  protected void onBeforeRender(){
    super.onBeforeRender();
    // clear old messages
    filter.clearMessages();
  }
}
通过实现现有的
IFeedbackMessageFilter
接口,提供新的筛选器实现

public class MessageFilter implements IFeedbackMessageFilter{

  List<FeedbackMessage> messages = new ArrayList<FeedbackMessage>();

  public void clearMessages(){
    messages.clear();
  }

  @Override
  public boolean accept(FeedbackMessage currentMessage){
    for(FeedbackMessage message: messages){
      if(message.getMessage().toString().equals(currentMessage.getMessage().toString()))
        return false;
    }
    messages.add(currentMessage);
    return true;
 }
}
public类MessageFilter实现IFeedbackMessageFilter{
列表消息=新建ArrayList();
公共无效clearMessages(){
messages.clear();
}
@凌驾
公共布尔接受(反馈消息currentMessage){
用于(反馈消息:消息){
if(message.getMessage().toString().equals(currentMessage.getMessage().toString()))
返回false;
}
messages.add(当前消息);
返回true;
}
}

我找到了这篇文章,我认为是时候分享Wicket 6.x和Wicket 7.x的方法了,因为
Session.get().cleanupFeedbackMessages()
已经被弃用了

要为Wicket 6.x实现这一点,您必须为反馈面板实现额外的过滤器。在哪里做,由你自己决定

通过扩展现有的
FeedbackPanel
类,创建一个新的FeedbackPanel实现

private class MessagesFeedbackPanel extends FeedbackPanel{

  private MessageFilter filter = new MessageFilter();

  public MessagesFeedbackPanel(String id){
    super(id);
    setFilter(filter);
  }


  @Override
  protected void onBeforeRender(){
    super.onBeforeRender();
    // clear old messages
    filter.clearMessages();
  }
}
通过实现现有的
IFeedbackMessageFilter
接口,提供新的筛选器实现

public class MessageFilter implements IFeedbackMessageFilter{

  List<FeedbackMessage> messages = new ArrayList<FeedbackMessage>();

  public void clearMessages(){
    messages.clear();
  }

  @Override
  public boolean accept(FeedbackMessage currentMessage){
    for(FeedbackMessage message: messages){
      if(message.getMessage().toString().equals(currentMessage.getMessage().toString()))
        return false;
    }
    messages.add(currentMessage);
    return true;
 }
}
public类MessageFilter实现IFeedbackMessageFilter{
列表消息=新建ArrayList();
公共无效clearMessages(){
messages.clear();
}
@凌驾
公共布尔接受(反馈消息currentMessage){
用于(反馈消息:消息){
if(message.getMessage().toString().equals(currentMessage.getMessage().toString()))
返回false;
}
messages.add(当前消息);
返回true;
}
}

以下代码适用于我在Wicket 6中的工作:

public class MyComponent extends Panel {

    ...
    FeedbackMessages feedback = getFeedbackMessages();
    feedback.clear();

以下代码适用于我在Wicket 6中的工作:

public class MyComponent extends Panel {

    ...
    FeedbackMessages feedback = getFeedbackMessages();
    feedback.clear();

你能提供更多的细节吗:下载链接是提交链接吗?您是否将Ajax与AjaxSubmitLink一起使用?在正常情况下,您无需自行清理反馈消息。这是一个Ajax下载链接。您是否尝试将反馈面板添加到AjaxRequestTarget?您能否提供更多详细信息:下载链接是SubmitLink吗?您是否将Ajax与AjaxSubmitLink一起使用?在正常情况下,您不必自己清理反馈消息。这是一个Ajax下载链接。您是否尝试将反馈面板添加到AjaxRequestTarget?做得好,完美的示例,它在wicket 7中也能工作,感谢Hanks的评论@Mikloskrivan您能告诉我如何使用他的吗?我是Wicket的新手,正在尝试删除反馈消息。我是否将MessagesFeedbackPanel作为组件添加到我的页面?我是否仍然使用此.info(“…”)添加消息?执行此操作(将面板添加为组件)时,信息消息会显示两次,而不是仅显示一次;-)干杯。干得好,很好的例子,它在wicket 7中也有效,谢谢Hanks的评论@Mikloskrivan你能告诉我如何使用他的吗?我是Wicket的新手,正在尝试删除反馈消息。我是否将MessagesFeedbackPanel作为组件添加到我的页面?我是否仍然使用此.info(“…”)添加消息?执行此操作(将面板添加为组件)时,信息消息会显示两次,而不是仅显示一次;-)干杯