2012-11-05 65 views
2

我有一個鏈接應該在服務器上激活一些進程並且變爲非活動狀態,那麼它應該在後臺監視這個進程,並且當它完成時,鏈接應該被更新。所有這些行爲都應該在AJAX的幫助下完成。鏈接轉化使用AJAX的Wicket 1.4週期性組件狀態更新

例子:Bake a cake- >Baking a cake- >Load baked cake


這個工作流程可以的AjaxLinkonClick方法中完成,但它會阻止另一種AJAX請求,並會往下走處理時間長。這裏

+0

看看這個問題[檢票如何處理長時間運行的tesks(http://stackoverflow.com /問題/ 2310421 /檢票如何到把手長時間運行的任務) – Glenner003

回答

6

一種選擇是使用AbstractAjaxTimerBehavior定期輪詢服務器狀態和更新標籤相應

/* Create stopped timer */ 
AbstractAjaxTimerBehavior timer = new AbstractAjaxTimerBehavior(Duration.seconds(1)) { 
    @Override 
    protected void onTimer(AjaxRequestTarget target) { 
     if (serverIsReady()) { 
      /* Stop timer */ 
      this.stop(target); 
      /* Update UI */ 
      label.setDefaultModel("Load baked cake"); 
      target.add(label); 
     } 
    } 
}); 
link.add(timer); 
timer.stop(); 

/* Create triggering event behaviour */ 
link.add(new AjaxEventBehavior("onclick") { 
    @Override 
    protected void onEvent(AjaxRequestTarget target) { 
     /* Update UI */ 
     label.setDefaultModel("Baking a cake"); 
     target.add(label); 
     /* Start timer */ 
     timer.restart(target); /* It seems this method doesn't exist in Wicket 1.4 */ 
    } 
});