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
不,它無法正常工作我選擇文件後無法看到MessageBox我需要的是,只有在選擇文件後,實際上傳應該得到觸發(MessageBox只是一個測試用的plaace持有者,它將被實際的servlet上傳代碼取代) –
我替換用一個實例來回答答案。這段代碼對我來說運行得非常好,使用GWT 2.4.0 – newnoise
真的很感謝你的幫助,但它對我不起作用。我無法看到Window.alert。我正在使用GWT 2.3.0,我正在FF瀏覽器(最新版本)中測試,但我認爲這不重要。 –