Java 如何关闭Wicket中的IFeedback?

Java 如何关闭Wicket中的IFeedback?,java,wicket,feedback,Java,Wicket,Feedback,我的html上有一个IFeedback组件,它会在发生什么事情时显示消息,等等:我上传了一个文件,一条消息会通知我:1文件上传成功。我想要的是结束这个和平的讯息。我怎么做呢?如果我刷新页面,消息将消失,但我想创建一个按钮或链接来单击它,然后消息将关闭/消失。有人能给我举个例子或提供一些帮助吗?您可以通过将WicketAjaxLink附加到物品上以“常规”方式关闭物品,然后 将可见性设置为false onClick(您需要将项目添加到 AjaxRequestTarget)。该方法有一个缺点:需要两

我的html上有一个
IFeedback
组件,它会在发生什么事情时显示消息,等等:我上传了一个文件,一条消息会通知我:
1文件上传成功
。我想要的是结束这个和平的讯息。我怎么做呢?如果我刷新页面,消息将消失,但我想创建一个按钮或链接来单击它,然后消息将关闭/消失。有人能给我举个例子或提供一些帮助吗?

您可以通过将Wicket
AjaxLink
附加到物品上以“常规”方式关闭物品,然后 将可见性设置为false onClick(您需要将项目添加到 AjaxRequestTarget)。该方法有一个缺点:需要两个Ajax调用。 一个用于显示IFeedbck项,另一个用于关闭它

实现这一点的另一种方法是添加自定义AJAX调用侦听器(javascript)。 订阅全局事件
'/ajax/call/success'


Wicket.Event.subscribe('/ajax/call/success',
    function(jqEvent, attributes, jqXHR, errorThrown, textStatus) {
        attachCloseHandler();
    }
);
并实现
attachCloseHandler()
函数将关闭处理程序附加到 您的IFeedback项目。在最普遍的情况下,这就像:


$('#my-container-with-feedback-items .my-feedback-item').click( function(e) { 
// close the item 
});
您应该检查
'/ajax/call/success'
callback,查看事件是否与反馈项相关,以避免每次调用该函数

第二个实现只进行一个Ajax调用:当项目被呈现时。结束了 仅在javascript中使用,并且您没有额外的Ajax调用


参考:

您可以添加一个
AjaxEventBehavior
,将
单击
处理程序添加到您的组件中,单击后它将消失。这里是带有反馈面板的示例代码

private FeedbackPanel feedbackPanel() {
    final FeedbackPanel fb = new FeedbackPanel("feedbackPanel") {
        @Override
        protected void onConfigure() {
            super.onConfigure();
            setVisible(anyMessage());
        }
    };
    fb.add(new AjaxEventBehavior("click") {
        @Override
        protected void onEvent(AjaxRequestTarget target) {
          fb.setVisible(false);
          target.add(fb);
        }
    });
    fb.setOutputMarkupPlaceholderTag(true);
    return fb;
}

WebMarkupContainer在FeedbackPanel中用反馈消息包装列表,它已经覆盖了方法“onConfigure”,因此您不必这样做。IMHO没有必要显式地设置反馈面板的可见性:在后续的ajax请求中(因此,当您想要隐藏列表时),所有反馈消息都已经标记为呈现,并且列表应该消失。将反馈面板添加到AjaxRequestTarget应该足够了。我认为OP希望在反馈面板中隐藏单个消息,但您的解决方案隐藏了整个面板。您需要覆盖“newMessageDisplayComponent”并在那里添加“AjaxEventBehavior”。谢谢,它可以工作!但是我不需要
fb.setVisible(false)行,因为在我单击它之后,它将消失,并且新消息不会出现。因此,我只需添加到
AjaxRequestTarget
!再次感谢你!