2012-10-22 13 views
6

Mam wymóg przesłania pliku na serwer z aplikacji internetowej napisanej w GWT. Złożona część jest taka, że ​​okno dialogowe FileUpload nie może zostać usunięte (z powodu problemu z crackiem w TabPanel). Więc na kliknięcie przycisku, muszę:GWT - przesyłanie pliku na serwer bez użycia okna dialogowego FileUpload

  • Otwórz wybór plik bezpośrednio, bez przeszkadza użytkownikowi dodatkowego formularza zawierającego UploadItem kliknąć
  • rozpocząć przesyłanie natychmiast po wybraniu pliku

napisałem następujący kod w GWT, aby otworzyć okno dialogowe wybierz plik na kliknięcie przycisku:

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(); }-*/; 

Chociaż nie otworzyć okno wyboru pliku po kliknięciu przycisku jednocześnie wyświetla również okno komunikatu z pustą wartością nazwy pliku.

Potrzebuję tylko tego, że dopiero po wybraniu pliku pojawi się okno komunikatu. Jak mogę to zrobić? Ponadto, jak przesłać rzeczywisty plik do serwera po tym (M

Odpowiedz

8

Oto przykład roboczych:

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(); 
}-*/; 

Aby przesłać go trzeba serwletu otrzymaniu przesyłanie Używam tego dodatkowe biblioteki. http://code.google.com/p/gwtupload/ Ty znajdź cały potrzebny kod na swojej stronie internetowej

+0

Nie, to nie działa.Nie mogę zobaczyć MessageBox po wybraniu pliku.To, czego potrzebuję jest to, że TYLKO po wybraniu pliku, rzeczywisty upload powinien dostać triggered (MessageBox jest po prostu uchwytem do testowania, zostanie zastąpiony rzeczywistym kodem do przesłania serwletu) –

+0

I replace d odpowiedź z roboczym przykładem. Ten kod działa doskonale dla mnie, używając GWT 2.4.0 – newnoise

+0

naprawdę doceniam twoją pomoc, ale to nie działa dla mnie. Nie jestem w stanie zobaczyć Window.alert. Używam GWT 2.3.0 i testuję to samo w przeglądarce FF (najnowsza wersja), ale nie sądzę, że powinno to mieć znaczenie. –

Powiązane problemy