1

この問題に関するサイトで多くの質問/回答者を読みましたが、それらのいずれかが私の問題を解決できるかどうかわかりません. 以下は、私のアプリケーションがどのように機能するかです。

  1. このページには、以前にダウンロードされたサーバーで利用可能なファイルのリストが表示されます。
  2. ページにはボタンもあり、クリックするとサーブレットにリクエストが送信され、サーバーでデータが収集され、定義済みのディレクトリに zip ファイルとして保存されます。サーブレットはファイルを読み取り、次の応答コンテンツ タイプとヘッダー情報を含むバイナリ ストリームとしてクライアントに送り返します。ファイル名=... ヘッダー=コンテンツ タイプ、アプリケーション/x-ダウンロード
  3. サーブレットが 100 MB を超える可能性のある膨大な量のデータを収集するのに長い時間がかかる可能性があるため、要求は非同期である必要があります。
  4. リクエストの進行中はボタンを無効にし、リクエストがいつ完了するかを知って、リストに更新を送信して新しいファイルを表示できるようにする必要があります。

iframe、Window.location.href、または html フォームを使用したソリューションが私の要件を満たすとは思いません。私の問題の解決策があれば教えてください。どんな助けでも大歓迎です。

-タム

4

1 に答える 1

0

質問のタイトルに書いたように、少しのjavascriptを使用することをお勧めします。JQueryまたはプロトタイプのいずれかで作業できます。

私はこの最後のものについてもっと知っているので、いくつかのコードを提供します

これがあなたのケースについて私が理解しているプロセスです。

まず、サーバーがフォームを含むページを送信します。次に、ユーザーがファイルを選択して送信ボタンをクリックすると、ページはリロードされず、Ajax を使用してジョブが実行され、JQuery がデータを取得して Ajax 経由でrequest();サーバーに送信し ( )、サーバーが結果を返信します。表示するdisplayFilesList();

your_form_idあなたのフォームIDです

submitFormフォームが送信されるときに呼び出される関数の名前です

displayFilesListサーバーが結果を送り返すときに呼び出される関数になります。この関数は、json 形式で結果を送り返すことも想定しています。

$('#your_form_id').submit(submitForm);

function submitForm()
{
    var data = $('#your_form_id').serializeArray();
    //Code to remove the send button here
    //Code to insert a loading.gif
    request("/your/url", data, displayFilesList);
    return false;
}

function    displayFilesList(jsonResult)
{
    var data = jQuery.parseJSON(jsonResult);
    //Code to display the files list here
    //
}

function    request(url, paramPost, successCallback, errorCallback)
{
    if ((typeof successCallback == 'undefined') || (successCallback == null))
        successCallback = dispSuccess;
    if ((typeof errorCallback == 'undefined') || (errorCallback == null))
        errorCallback = dispError;

    var AjaxUrl = url;

    $.ajax({    
            type: "POST",
            url: AjaxUrl,
            data: paramPost
           }
          ).done( function(msg)
                  {
                       successCallback(msg);
                  }
          ).fail( function(jqXHR, textStatus, errorThrown)
                  {
                       errorCallback(jqXHR, textStatus, errorThrown);
                  }
          );
}

function    dispError(jqXHR, textStatus, errorThrown)
{
    alert(jqXHR.responseText);
}
function    dispSuccess(html)
{
    alert(html);
}
于 2013-03-22T20:36:32.233 に答える