如何在wicket中创建全局事件?

fkaflof6  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(408)

情况很简单:我有几个ajax组件,我想在发生ajax操作时更新它们。当所有这些组件都在同一个位置并且可以彼此接触时,这是很容易的。
但是如果页面有一个巨大的层次结构,这就不是那么简单了,为了解决这个问题,我想发送一些全局事件(其中将包含一个ipartialagerequesthandler),所有这些组件都应该捕获它并自己更新。
我怎么能在维克特做到这一点?
实际上我明白了 onEvent 方法,我可以访问其中的iPartialAggerRequestHandler:

public void onEvent(IEvent<?> event){
    Object payload = event.getPayload();
    if (payload instanceof IPartialPageRequestHandler) {
    ...
    }
}

但是,如何创建该方法捕获的全局事件呢?

oaxa6hgo

oaxa6hgo1#

您可以通知整个页面或应用程序“page.send(…)”或“application.send(…)”。wicket已经为每个ajax事件通知了整个页面层次结构。请参见《用户指南》中的本段结尾:
https://ci.apache.org/projects/wicket/guide/8.x/single.html#_how_to_use_ajax_components_and_behaviors

mitkmikd

mitkmikd2#

创建自定义事件,例如:

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

相关问题