Java Wicket-在回调结果之后更新表单

Java Wicket-在回调结果之后更新表单,java,wicket,Java,Wicket,当我试图用回调操作提供的结果更新表单时,我遇到了一个问题。这个问题是由Wicket单线程引起的,我不知道如何实现解决方案。 我需要更新的代码如下 provaButton = new AjaxLink("prova_btn"){ @Override public void onClick(AjaxRequestTarget art) { getChannelManagerAPI().getTok

当我试图用回调操作提供的结果更新表单时,我遇到了一个问题。这个问题是由Wicket单线程引起的,我不知道如何实现解决方案。 我需要更新的代码如下

provaButton = new AjaxLink("prova_btn"){
                @Override
                public void onClick(AjaxRequestTarget art) {
                    getChannelManagerAPI().getToken(new ChannelManagerCallbackWrapper() {
                        @Override
                        protected void onSuccess(Object object) {
                            Object[] response = null;
                            response = (Object[]) object;
                            for (Object obj : response) {
                                info("Result " + obj.toString());
                            }
                        }

                        @Override
                        protected void onFailure(Throwable throwable) {
                            info("Errore nella chiamata : "+ throwable.getMessage());
                        }
                    });
                    refreshFeedBackPanel(art);
                }

            };
            add(provaButton);

似乎您正在进行异步调用。Wicket不支持挂起HTTP线程,因此您有以下选项:

  • 阻止HTTP线程并等待异步服务的响应。例如,您可以在异步调用之后立即使用
    java.util.concurrent.CountDownLatch
    ,在回调方法中使用
    wait()
    。只有当您确定异步调用是快速的时,才使用这种方法

  • 使用
    org.apache.wicket.ajax.AbstractAjaxTimerBehavior
    或其专门化
    org.apache.wicket.ajax.ajaxSelfUpdatengTimerBehavior
    进行
    长轮询。其思想是启动异步调用,然后每N毫秒/秒Wicket将进行一次新的Ajax调用,以检查是否有响应并呈现它

  • 一旦异步调用的结果可用,就使用Wicket Native WebSocket推送该结果


  • 非常感谢你。我试图改进你的一个建议。我需要另一个帮助。如何停止AjaxSelfUpdatengTimerBehavior?使用,嗯,
    #停止(AjaxRequestTarget)
    !看见