SO を調べたところ、私が求めているのと同様の質問が見つかりませんでした。私がやろうとしていることを説明することから始めて、より具体的な質問で締めくくります..
私の狙い
クエリ文字列パラメーターをサーブレットに渡すリンクがあります。そのパラメータはreport
. サーブレットの場合report = true
は、PDF ドキュメントを生成します。次に、PDF ドキュメントは、応答を に設定して、この値を返しmime type
ますapplication/pdf
。このコードを以下に示します。
String mimeType = "application/pdf";
res.setContentType(mimeType);
res.setHeader("Content-Disposition", "attachment; filename=\"" +
getEventID(doc) + ".pdf\"");
// Set the response content type and pdf attachment.
out = new ByteArrayOutputStream();
// All PDF Data is pushed onto the output stream.
com.lowagie.text.Document pdfDoc = buildPDF(getEventID(doc));
response
このコードは、オブジェクトの出力ストリームに書き込まれます。
if(pdfDoc == null)
{
// Something went wrong in generating the report.
return false;
}
// Create the PDF document.
out.writeTo(res.getOutputStream());
すべてがうまくいけば、クラスは を返しますtrue
。そうでない場合は、 を返しますfalse
。今、私が抱えている問題は、false を返すかどうかです。本質的に、私はデータがどこにも行かないように真っ白にしたいのです。出力ストリームに何かを書き込む前に、物事がうまくいったことを確認するためのチェックを追加したので、現時点では、何か問題が発生した場合、PDF タイプに設定されているがデータが含まれていない応答があります。
次に、クラスの出力をテストする関数があります。true の場合は問題ありませんが、false の場合はerror
パラメーターを設定します。
if(!PdfReportGenerator.generateReport(res, repositoryURI)) {
req.getSession().setAttribute(SDRestServlet.PDF_ERROR, "error");
// This will then re-direct back to the current URL, meaning the page
// looks like it doesn't do anything.
res.sendRedirect(req.getRequestURI());
}
問題は、このリダイレクトが実際にはまったく役に立たないことです。に保存されている他の値を台無しにしてrequest
おり、何もしていないようにページを表示している間、ユーザーにエラーメッセージを出力することはできません。
問題
Web 応答が返されていないように見せる方法はわかっていますが、意味のある情報をユーザーに出力できないことを意味し、これは明らかに理想的な結果ではありません。
私の質問
ブラウザがデータを無視するように、サーブレットを強制的に停止するか、何かを返す方法はありますか?
私の2番目の質問は、ブラウザに送り返すことができるものがある場合、メッセージをポップアップさせるためにクライアント側でできることはありますalert()
か?
私はできる限り明確にしていますので、何か知りたいことがあればお尋ねください :)