PoiでExcelのダウンロードを行っているのですが、
以下のようにサーブレット側、サーブレットから呼び出される関数を作ると、
ダウンロード処理完了後に自動でタブが閉じられません。
Java
1 2 protected void doDownload(HttpServletResponse response) { 3 4 response.setContentType("application/octet-stream"); 5 String fileName = null; 6 try { 7 fileName = new String(getExcelFileName().getBytes("Windows-31J"), "ISO-8859-1"); 8 } catch (UnsupportedEncodingException e1) { 9 e1.printStackTrace(); 10 } 11 response.setHeader("Content-Disposition", "attachments; filename=\"" + fileName + "\""); 12 response.setHeader("Cache-Control", "public"); 13 response.setHeader("Pragma", "public"); 14 15 try { 16 OutputStream out = new BufferedOutputStream(response.getOutputStream()); 17 wb.write(out); 18 } catch (IOException e) { 19 e.printstactrace(); 20 } finally { 21 try { 22 wb.close(); 23 } catch (IOException e) { 24 e.printstactrace(); 25 } 26 } 27 } 28
Java
1 protected void doUpdateExcel(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 --- エクセルを生成する処理 --- 5 6 doDownload(); // ここで上記のエクセルダウンロードを呼び出すと、タブが自動で閉じられない 7 8}
一方、関数を使わずに、関数の処理をそっくりそのまま、サーブレットで実行すれば、
タブは自動で閉じられます。
おそらく原因は、関数内で、wb.write(out)を行うと、この内部処理でreturnするような処理になっていると思うのですが、
関数でそれを実行すると、まだ、サーブレット側の処理がのこっていることになり、
一方、サーブレットでwb.write(out)とすれば、内部処理でreturn後、サーブレットがおわることになり、
タブが自動に閉じられるような挙動になっているのではと思っています。
同じコードをサーブレット単位で書くのは面倒なので、
関数内で実行したいですが、なにかよい方法はございませんでしょうか。
回答1件
あなたの回答
tips
プレビュー