2017-06-13 23 views
0

我有一個使用Wicket的Web應用程序。我的問題如下: 我有一部分代碼運行在AjaxRequestTarget中,花費很長時間,並且我有必要在此操作期間顯示一個繁忙的指示符,以便向用戶顯示我們正在嘗試處理請求。我嘗試使用target.appendJavascript(「jsfunction()」),但它不起作用,因爲它在方法執行後被觸發。我怎樣才能實現這個目標?Wicket在AjaxRequestTarget中調用Javascript函數

我的示例代碼是由Martin-G提供了以下

final ConfirmModal del_modal = new ConfirmModal("del-btn", "Are you sure?") { 
     @Override 
     public void onClickOK(AjaxRequestTarget target) { 

      target.appendJavaScript("loadingFormFromTarget();"); 

      try { 
       Thread.sleep(10000); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(ListPricePlanPage.class.getName()).log(Level.SEVERE, null, ex); 
      }}} 

UPDATE

該解決方案正常工作與AjaxLink,但我的問題是比較複雜的。我有一個擴展ModalWindo一個ConfirmModal,這個實現 公共抽象類ConfirmModalPanel擴展面板{

public ConfirmModalPanel(String id, String text) { 
    super(id); 

    add(new Label("text", text)); 

    AjaxLink ok = new AjaxLink("ok") { 
     @Override 
     public void onClick(AjaxRequestTarget target) { 
      onClikOK(target); 
     } 

     @Override 
     protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { 
      super.updateAjaxAttributes(attributes); 
      attributes.getAjaxCallListeners().add(new AjaxCallListener().onBeforeSend("start();").onComplete("finish();")); 
     } 
    }; 



    add(ok); 

    add(new AjaxLink("ko") { 
     @Override 
     public void onClick(AjaxRequestTarget target 
     ) { 
      onClikKO(target); 
     } 
    } 
    ); 



} 

abstract public void onClikOK(AjaxRequestTarget target); 

abstract public void onClikKO(AjaxRequestTarget target 
); 

}

功能「開始()」和「完成()」的正確調用,但onClickOK方法內的請求寫入執行繼續,並且我無法顯示忙指示符。

回答

1
+0

此解決方案在AjaxLink上正常工作,但在我的情況下不起作用。我已經更新了描述。 –

+0

您應該在'start()'中顯示指標,並將其隱藏在'finish()'中。這個想法是在向服務器端發出請求之前顯示它。你可以使用'setTimeout(...)'來延遲顯示它。在這種情況下,你也必須在'finish()'中使用'clearTimeout()'。 –

+0

我在您的幫助下解決了問題,但我以這種方式修改瞭解決方案。我使用AjaxCallListener通過updateAjaxAttributes使用setTimeout來引發事件start():onSendBefore,並且我在onCLickOk方法內用方法target.appendJavascript(「finish()」)引發事件finish()。這工作正常。 –