2014-10-07 2 views
0

У меня проблема с gwt-upload: мне нужно onChange Upload, чтобы получить мой объект из db; если он существует, веб-приложение может загружать файл с помощью Servlet, иначе он отображает предупреждение.Неправильная загрузка с помощью gwt upload

Код с комментарием работает только в позиции с комментарием «Это работает».

Почему он не запускается в блоке 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

+0

Есть ли обходной путь, чтобы избежать этого? @pratZ – django

ответ

0

Вы можете решить эту проблему, добавив кнопку загрузки и отправив форму загрузки при успешном вызове сервера. Вот краткое описание того, как это сделать. Прочитайте gwtupload documentation для добавления отображения сервлета в web.xml.

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 
       } 
      } 
    }); 
} 
Смежные вопросы