1

さて、私はこれに数日間取り組んできましたが、何か問題が発生しました。基本的に、考え方は単純です。ユーザーがリンクをクリックすると、サーバーにリクエストが送信され、PDF ドキュメントが生成されます。これ自体はダウンロードされません。添付ファイルの形式でブラウザに送り返されます。

問題は簡単です。PDF ドキュメントの生成で問題が発生した場合、ブラウザがファイルをダウンロードしないようにします。今、私が今動いていることは単純です。

  if(req.getParameterMap().containsKey("report")) {
            if(req.getParameter("report").equals("true"))
            {
                // If the query string parameter is set, generate the PDF.
                if(!PdfReportGenerator.generateReport(res, repositoryURI)) {
                    // Something went wrong, so redirect the browser.
                    res.sendRedirect(req.getRequestURI());
                }
            }
        }

現時点では、これが行うことは、ユーザーを既に表示しているページにリダイレクトすることです。要するに、何も起こりません。これで問題ありませんが、ブラウザからのフィードバックをお待ちしています。現時点で考えられる 1 つの方法は"?error=pdf、URL の末尾にこれらの行に沿って何かを追加することですが、ユーザーがクエリ文字列を必要とする他の機能を持っている可能性があります。

私の質問は、クエリ文字列以外に、添付ファイルをダウンロードするときにエラーが発生したというメッセージをブラウザに送り返す方法があるかどうかです。どんな提案も歓迎します。Javascriptここで選択する言語になると思います。

4

1 に答える 1

0

私はあなたのためにこの簡単な解決策を持っています...

if(req.getParameter("report").equals("true"))
{
  req.getSession().setAttrinute("REPORT_OK",false);
  //If the query string parameter is set, generate the PDF.
  if(!PdfReportGenerator.generateReport(res, repositoryURI)) {
    // Something went wrong, so redirect the browser.
    res.sendRedirect(req.getRequestURI());
  }else{
    req.getSession().setAttrinute("REPORT_OK",true);
  }
}

RequestURI ページには、変数の状態についてajaxで確認するためのdocument.ready()関数があります。REPORT_OK

ケース 1: 値が の場合はnull、リクエストが上記のコードからのコールバックではないことを意味するため、ユーザーには何も表示しません。

ケース 2: 値が の場合はfalse、エラーが発生したことを意味し、ユーザーに通知できます。

ケース 3: 値が の場合、truepdf の生成は成功しているため、ユーザーに通知する必要があります。

ページを更新するか、ページに再度アクセスすると、ajax がケース 1 に移動するように、ajax で確認した後、セッションから属性を削除することを忘れないでください。

アップデート

ajax 呼び出しを行う方法:

$(document).ready(function() {
  var divToChange = $('#message');//div id of the message you show to user
  $.ajax({
    type: 'POST',
    url: 'checkReport.jsp',
    data: {},
    beforeSend:function(){
        divToChange.html('Loading...');
    },
    success:function(data){
        divToChange.html(data);
    },
    error:function(){
        divToChange.html('Checking file failed!');
    }
  });
)};

そして今あなたのcheckReport.jsp

<%
Boolean status = (Boolean) session.getAttribute("REPORT_OK");
if(status==null){
    //dont return anything
}else if(status){
    out.print("Report is ok");
}else {
    out.print("Report generation failed ");
}
%>
于 2013-07-18T13:32:23.330 に答える