7

GWT で記述された Web アプリケーションからサーバーにファイルをアップロードする必要があります。複雑な部分は、FileUpload ダイアログ ボックスを表示できないことです (TabPanel のスペース不足の問題のため)。したがって、ボタンをクリックすると、次のことが必要になります。

  • クリックする 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(); }-*/;

これにより、ボタンのクリック時にファイル選択ダイアログが開きますが、同時に、ファイル名の値が空白のメッセージ ボックスも表示されます。

だから私が必要とするのは、ファイルが選択された後にのみメッセージボックスが表示されるということです。これどうやってするの?また、この後実際のファイルをサーバーにアップロードする方法(M

4

1 に答える 1

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

アップロードするには、アップロードを受け取るサーブレットが必要です。私はこの追加のライブラリを使用します: http://code.google.com/p/gwtupload/必要なすべてのコードは Web サイトで見つけることができます。

于 2012-10-22T14:54:21.467 に答える