我要求从GWT编写的Web应用程序将文件上传到服务器。复杂的部分是无法显示FileUpload对话框(由于TabPanel上的空间紧缩问题)。所以点击一个按钮,我需要:
我在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(); }-*/;
虽然这会在按钮单击时打开文件选择对话框,但它同时还会显示带有文件名空白值的消息框。
所以我需要的是,只有在选择文件后,才会显示消息框。我怎样才能做到这一点?此外,如何在此之后将实际文件上传到服务器(M
答案 0 :(得分:8)
这是一个有效的例子:
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/您可以在他们的网站上找到所需的所有代码。