2014-10-07 66 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 
       } 
      } 
    }); 
}