如何解决如何在 wicket 中创建全局事件?
案例很简单:我有几个 ajax 组件,我想在某些 ajax 操作发生时更新它们 发生了。当所有这些组件都在同一个地方并且可以一个接一个地到达时,这很容易。
但是如果页面有一个巨大的层次结构,这可能不是那么简单,为了解决这个问题,我想发送一些全局事件(它将包含一个 IPartialPageRequestHandler),所有这些组件都应该捕获它并自行更新。
>我怎样才能在检票口中做到这一点?
实际上我在组件类中看到了 onEvent
方法,我可以访问其中的 IPartialPageRequestHandler:
public void onEvent(IEvent<?> event){
Object payload = event.getPayload();
if (payload instanceof IPartialPageRequestHandler) {
...
}
}
但是我怎样才能创建应该被这个方法捕获的全局事件?
解决方法
创建自定义事件,例如:
public class CounterUpdate
{
private final AjaxRequestTarget target;
/**
* Constructor
*
* @param target
*/
public CounterUpdate(AjaxRequestTarget target)
{
this.target = target;
}
/** @return ajax request target */
public AjaxRequestTarget getTarget()
{
return target;
}
}
在你的 Ajax 回调方法中广播它:
send(getPage(),Broadcast.BREADTH,new CounterUpdate(target));
在对此事件感兴趣的任何组件/行为中执行:
@Override
public void onEvent(IEvent<?> event)
{
super.onEvent(event);
// check if this is a counter update event and if so repaint self
if (event.getPayload() instanceof CounterUpdate)
{
CounterUpdate update = (CounterUpdate)event.getPayload();
update.getTarget().add(this);
}
}
,
您可以通知整个页面或应用程序“page.send(...)”或“application.send(...)”。 Wicket 已经为每个 AJAX 事件做了它来通知整个页面层次结构。请参阅用户指南中本段的结尾:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。