user373201
user373201

Reputation: 11445

wicket download link clear feedback panel

I have couple of drop downdowns and a download link button. Based on the user selection, i get the file to be downloaded. if the user did not make a selection I show an error on the feedback panel. if the user then makes a selection and clicks on download link it works fine, but the previous feedback message is still visible. How do I clear it.

onclick of the download link, i tried the following, but no use

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

Upvotes: 2

Views: 4019

Answers (3)

Jarda Pavlíček
Jarda Pavlíček

Reputation: 1846

Following code works for me in Wicket 6:

public class MyComponent extends Panel {

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

Upvotes: 0

X-HuMan
X-HuMan

Reputation: 1488

I've found this post and I think it is time to share the way for Wicket 6.x and for Wicket 7.x, because Session.get().cleanupFeedbackMessages() was deprecated already.

To do it for Wicket 6.x you have to implement additional filter for the feedback panel. Where to do it, it is your decision to decide.

Create a new FeedbackPanel implementation by extending from the existing FeedBackPanel class

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();
  }
}

Provide a new Filter implementation, by implementing the existing IFeedbackMessageFilter interface

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;
 }
}

Upvotes: 2

Martin Strejc
Martin Strejc

Reputation: 4347

Probably it is

Session.get().cleanupFeedbackMessages()

even it has been changed in Wicket 6.x

Upvotes: 4

Related Questions