2012-10-22 53 views
6

我有要求從GWT中編寫的Web應用程序上傳文件到服務器。複雜的部分是FileUpload對話框不能顯示(由於TabPanel上的空間緊縮問題)。因此,對一個按鈕的點擊,我需要:GWT - 在不使用FileUpload對話框的情況下將文件上傳到服務器

  • 打開文件選擇直接,不打擾與含有UploadItem額外的形式向用戶點擊
  • 啓動文件選擇後立即上傳

我在GWT寫下面的代碼打開文件選擇按鈕的點擊對話框:

final FileUpload upload = new FileUpload(); 

upload.setVisible(false); 
upload.setName("uploadFormElement"); 
panel.add(upload); 

panel.add(new Button("Select File", new ClickListener() 
{ public void onClick(Widget pSender) 
{ 
    jsClickUpload(upload.getElement()); 
    MessageBox.showMessage("selected filename: " + upload.getFilename()); 
} 
})); 

native void jsClickUpload(Element pElement) /*-{ pElement.click(); }-*/; 

雖然這打開文件選擇對話框點擊按鈕時,它同時也顯示文件名爲空白的消息框。

所以我需要的是,只有在選擇文件後,消息框纔會顯示。我怎樣才能做到這一點?

public void onModuleLoad() { 
    final FileUpload upload = new FileUpload(); 

    upload.setVisible(false); 
    upload.setName("uploadFormElement"); 
    RootPanel.get().add(upload); 

    Button b = new Button("Select File"); 
    b.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
      jsClickUpload(upload.getElement()); 
     } 
    }); 

    upload.addChangeHandler(new ChangeHandler() { 

     @Override 
     public void onChange(ChangeEvent event) { 
      Window.alert(upload.getFilename()); 
     }}); 

    RootPanel.get().add(b); 
} 

native void jsClickUpload(Element pElement) /*-{ 
    pElement.click(); 
}-*/; 

要上傳它,你需要一個Servlet接收上載我用這個額外的庫::http://code.google.com/p/gwtupload/也,如何在這之後(M

回答

8

這裏是一個工作示例實際文件上傳到服務器找到所需的所有代碼在他們的網站上

+0

不,它無法正常工作我選擇文件後無法看到MessageBox我需要的是,只有在選擇文件後,實際上傳應該得到觸發(MessageBox只是一個測試用的plaace持有者,它將被實際的servlet上傳代碼取代) –

+0

我替換用一個實例來回答答案。這段代碼對我來說運行得非常好,使用GWT 2.4.0 – newnoise

+0

真的很感謝你的幫助,但它對我不起作用。我無法看到Window.alert。我正在使用GWT 2.3.0,我正在FF瀏覽器(最新版本)中測試,但我認爲這不重要。 –

相關問題