2017-01-24 25 views
0

我嘗試使用回調操作提供的結果更新窗體時出現問題。這個問題是由Wicket singleton線程造成的,我不明白我該如何實現一個解決方案。 我需要更新的代碼如下。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); 

回答

0

看來你正在進行異步調用。檢票不支持暫停HTTP線程,所以你有以下幾種選擇:

  1. 塊中的HTTP線程,並等待來自異步服務的響應。例如。您可以使用java.util.concurrent.CountDownLatchawait()在異步調用之後,countDown()在回調方法中。只有在確定異步呼叫速度快的情況下才使用此方法!

  2. 使用org.apache.wicket.ajax.AbstractAjaxTimerBehavior或其專業org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehaviorLong polling。這個想法是,你開始異步調用,然後在每N毫秒/秒Wicket將進行新的Ajax調用來檢查是否有響應並呈現它。

  3. 使用Wicket Native WebSocket在異步調用可用時立即推送結果。

+0

非常感謝。我試圖改進你的一個建議。 –

+0

我需要另一個幫助。我該如何停止AjaxSelfUpdatingTimerBehavior? –

+0

With,uhm,'#stop(AjaxRequestTarget)'!請參閱https://github.com/apache/wicket/blob/c4805d87012c2f0c2e80418453d0c60f3a5db7c7/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java#L195 –