【问题标题】:How to create global events in wicket?如何在 wicket 中创建全局事件?
【发布时间】:2020-12-21 08:32:40
【问题描述】:

案例很简单:我有几个 ajax 组件,我想在某些 ajax 操作发生时更新它们 发生了。当所有这些组件都在同一个地方并且可以一个接一个地到达时,这很容易。

但是如果页面有一个巨大的层次结构,这可能不是那么简单,为了解决这个问题,我想发送一些全局事件(它将包含一个 IPartialPageRequestHandler),所有这些组件都应该捕获它并自行更新。

如何在检票口中做到这一点?

实际上我在组件类中看到了onEvent 方法,我可以访问其中的 IPartialPageRequestHandler:

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

但是我怎样才能创建应该被这个方法捕获的全局事件呢?

【问题讨论】:

    标签: java wicket


    【解决方案1】:

    创建自定义事件,例如:

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

    【讨论】:

      【解决方案2】:

      您可以通知整个页面或应用程序“page.send(...)”或“application.send(...)”。 Wicket 已经为每个 AJAX 事件执行此操作以通知整个页面层次结构。请参阅用户指南中本段的结尾:

      https://ci.apache.org/projects/wicket/guide/8.x/single.html#_how_to_use_ajax_components_and_behaviors

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        相关资源
        最近更新 更多