GWT FileUpload は、フォームの送信中にファイルをアップロードできるようにするウィジェットとして提供されます (少なくとも私はそれを理解しています:)) .." ボタン。
私は GWT の経験が少ない (そして JavaScript がない) ため、既存のソリューションを探したところ、非常に優れたプロジェクトgwtuploadを見つけました。それは良いことですが、私は自分自身のミニチュアバージョンが欲しいことに気付きました (また、それがどのように機能するかについても興味がありました)。そこで、コードをブラウジングし、魔法の部分を抽出しようとしました。GWT FileInput が使用されていることに気付きましたが、表示されておらず、ボタンのクリックはこの FileInput に委任されています。gwtupload のソースを確認した後、抽出しようとしたコード (クリックを委任する部分のみ) には、次のトリッキーな JSNI が含まれていますelem.click()
。
class MyUpload extends Composite {
private static native void clickOnInputFile(Element elem) /*-{
elem.click();
}-*/;
public MyUpload() {
final FileUpload upload = new FileUpload();
AbsolutePanel container = new AbsolutePanel();
// container.add(upload);
Button btn = new Button("My Browse..");
btn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
clickOnInputFile(upload.getElement());
}
});
container.add(btn);
initWidget(container);
}
}
しかし、これはうまくいかないようです: 'My Browse..' をクリックしても効果はありません (念のため、コメントなしcontainer.add(upload)
の行で実行しようとしました)。このコード サンプルのどこが間違っているか、何が欠けているかを理解するのを手伝ってくれませんか?
前もって感謝します。
PS私はそれをFormPanelに配置する必要があることを知っており、サーブレットで実際の送信/処理を実行する方法について残りを知っています。私がやりたいのは、この種の装飾だけです。