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