Excelファイルをダウンロードする必要がある状況があります。だから私はそのためにWindow.openを使います。問題は、Window.open を呼び出す前に、サーバーの場所にファイルが存在するかどうかを確認する必要があることです。したがって、ユーザーが呼び出しの下のダウンロードボタンをクリックすると、
public void onClick(Button button, EventObject e) {
final String url = GWT.getModuleBaseURL() + "fileupload/dailyLogReport?param1=param1
openFileDownloadWindow(url,fileName);
}
public void openFileDownloadWindow(final String url,String fileName){
CommonServiceAsync serviceAsyn = CommonService.Util.getInstance();
final AsyncCallback callback = new AsyncCallback() {
public void onSuccess(Object result)
{
isFileExsist = (Boolean)result;
if(isFileExsist){
Window.open( url, "_blank", "status=0,toolbar=0,menubar=0,location=0");
}else{
Window.alert("File not found.");
}
}
public void onFailure(Throwable caught)
{
MessageBox.alert("Error", "Error while getting data"
+ caught.getMessage());
}
};
// calling of the action
serviceAsyn.isDailyLogFileExsists(fileName, callback);
}
しかし、問題は、Window.openを成功の中に入れると、ウィンドウが開き、ファイルをダウンロードせずにすぐに閉じることです。しかし、Window.open を onClick メソッドに直接配置すると、ウィンドウ ポップアップが正常に開き、ファイルが正常にダウンロードされます。しかし、ファイルが存在するかどうかを確認して条件付きでファイルをダウンロードする必要があるため、onClick 内に Window.open を配置することはできません。
コールバック成功関数内で Window.open が正しく動作しない理由は何ですか?