我有几个下拉菜单和一个下载链接按钮。根据用户选择,我得到要下载的文件。如果用户没有做出选择,我会在反馈面板上显示错误。如果用户随后进行选择并单击下载链接,它可以正常工作,但之前的反馈消息仍然可见。我该如何清除它。
点击下载链接,我尝试了以下,但没有用
FeedbackMessages me = Session.get().getFeedbackMessages();
me.clear();
我有几个下拉菜单和一个下载链接按钮。根据用户选择,我得到要下载的文件。如果用户没有做出选择,我会在反馈面板上显示错误。如果用户随后进行选择并单击下载链接,它可以正常工作,但之前的反馈消息仍然可见。我该如何清除它。
点击下载链接,我尝试了以下,但没有用
FeedbackMessages me = Session.get().getFeedbackMessages();
me.clear();
大概是
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;
}
}
以下代码在 Wicket 6 中适用于我:
public class MyComponent extends Panel {
...
FeedbackMessages feedback = getFeedbackMessages();
feedback.clear();