2014-10-07 41 views
0

我有一個gwt-upload的問題:我需要onChange上傳來從數據庫中獲取我的對象;如果存在,則Web應用程序可以使用Servlet上載文件,否則會顯示警報。用gwt上傳無法正確上傳

帶評論的代碼僅在'It works'評論的位置運行。

爲什麼它不在else塊中運行?

final MultiUploader upload = new MultiUploader(FileInputType.BUTTON); 
upload.addOnChangeUploadHandler(new OnChangeUploaderHandler() { 

    @Override 
    public void onChange(IUploader uploader) { 
     myService.getMyObject(name, new AsyncCallback<List<Object>>() { 

      @Override 
      public void onFailure(Throwable caught) { 
       Window.alert("Something"); 
      } 

      @Override 
      public void onSuccess(List<Object> listMyObject) { 
       if(listMyObject.size() == 0) { 
        Window.alert("Error."); 
       } else { 
        //It doesn't works. 
        String url = GWT.getModuleBaseURL() + "upload?nameObject=" + name; 
        upload.setServletPath(url); 
       } 
      } 
     }); 
    } 
}); 
//It works. 
String url = GWT.getModuleBaseURL() + "upload?nameObject=" + name; 
upload.setServletPath(url); 
+0

你需要閱讀更多[gwtupload文檔】(https://code.google.com/p/gwtupload/wiki/GwtUpload_GettingStarted)。你沒有正確使用它。此外,您在重寫的'onChange'方法內進行的調用是異步的,這意味着應用程序不會等待您的對象出現在客戶端上並將繼續執行。 – pratZ 2014-10-08 06:00:16

+0

是否有避免此問題的解決方法? @pratZ – django 2014-10-08 08:00:42

回答

0

您可以通過添加上傳按鈕並在服務器調用成功時提交上傳表單來解決此問題。以下是如何做到這一點的大綱。在web.xml中添加servlet映射,請閱讀gwtupload documentation

Uploader uploader = new Uploader(FileInputType.BROWSER_INPUT); 
uploader.setServletPath("myservletpath"); 
uploader.setAutoSubmit(false); 
uploader.setEnabled(true); 

Button uploadButton = new Button("Upload"); 
uploadButton.addClickHandler(new ClickHandler()){ 
    myService.getMyObject(name, new AsyncCallback<List<Object>>() { 

      @Override 
      public void onFailure(Throwable caught) { 
       //do something 
      } 

      @Override 
      public void onSuccess(List<Object> listMyObject) { 
       //do something if condition satisfies then submit 
       if(conditionSatifies){ 
        uploader.submit(); 
       }else{ 
        //do something, prompt a message 
       } 
      } 
    }); 
}