【问题标题】:wicket download link clear feedback panelwicket 下载链接 清除反馈面板
【发布时间】:2013-06-14 15:55:35
【问题描述】:

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

点击下载链接,我尝试了以下,但没有用

FeedbackMessages me = Session.get().getFeedbackMessages(); 
me.clear();

【问题讨论】:

  • 您能否提供更多详细信息:下载链接是 SubmitLink 吗?您是否将 Ajax 与 AjaxSubmitLink 一起使用?在正常情况下,您不需要自己清理反馈消息。
  • 这是一个Ajax下载链接
  • 您是否尝试将 FeedbackPanel 添加到 AjaxRequestTarget?

标签: wicket


【解决方案1】:

大概是这样的

Session.get().cleanupFeedbackMessages()

即使在 Wicket 6.x 中已更改

【讨论】:

    【解决方案2】:

    我找到了这篇文章,我认为是时候分享一下 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();
      }
    }
    

    提供一个新的Filter实现,通过实现现有的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;
     }
    }
    

    【讨论】:

    • 干得好,完美的例子,它也适用于 wicket 7,谢谢
    • 感谢@MiklosKrivan 的评论
    • 你能告诉我如何使用他的吗?我是 Wicket 的新手,并试图删除反馈消息。我是否将 MessagesFeedbackPanel 作为组件添加到我的页面?我是否仍然使用 this.info("...") 添加消息?当我这样做(将面板添加为组件)时,信息消息会出现两次而不是一次;-) 干杯。
    【解决方案3】:

    以下代码适用于 Wicket 6:

    public class MyComponent extends Panel {
    
        ...
        FeedbackMessages feedback = getFeedbackMessages();
        feedback.clear();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多