- PR -

CSVダウンロード

1
投稿者投稿内容
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2007-04-23 15:39
いつもお世話になっています。

「CSV保存」というボタンを押すと、セッションで保持していた
データをCSV形式で保存するという処理を作成しました。
それで起動を確認の為、CSV保存ボタンを押すと「ファイルのダウンロード」というダイアログが表示され、「保存」を押すと「ファイルの情報を取得しています」というダイアログ画面が表示されたままで動かなくなってしまいます。しかたがないので、ここでは一度「キャンセル」ボタンを押します。それで、もう一度「CSV保存」を押して「保存」を押すと今度は「ファイルの情報を取得しています」という画面で止まらず、「名前をつけて保存」というダイアログが表示され、正しくダウンロード出来ました。
なぜか、一度目は必ずダウンロードできません。
ちなみに下記がソースなのですがおかしな点がありましたら教えて頂けますでしょうか。

環境
java:1.5.0_04
Tomcat:5.5
apache:2.0.54
struts:1.2

====================================================-
public ActionForward syukeiSikakuCSV(ActionMapping map, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {

HttpSession session = req.getSession();
ArrayList testList = (ArrayList)session.getAttribute("testList");

res.setContentType("application/octet-stream;charset=Windows-31J");
res.setHeader("Content-Disposition", "attachment; filename=test.csv");

PrintWriter out = res.getWriter();
//タイトル記述
out.write("テストコード,テスト名称,テスト数" + "\n");

Iterator ite = syukeiSikakuList.iterator();
while (ite.hasNext()) {
 TestData testData = (TestData)ite.next();
out.write(testData.getTestCd() + "," + testData.getTestName() + "," + testData.getTestCnt() + "\n");
}
out.close();

//次画面の表示
return map.findForward("success");
}
=======================================================
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-23 16:04
ご指摘の現象と関係あるかどうかは分かりませんが、out を close() したのに ActionForward 返しているのがちょっと不思議です。
処理は終了していて、画面遷移先はないので null を返せばいいのではないかと。
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2007-04-23 16:10
インギさん、ご返答ありがとうございます。

インギさんの言われたように
return map.findForward(null);
に記述し直してやったのですが駄目でした。
それで、ちょっとネットで調べていたら下記の内容を
見つけたのでひょっとしたら原因はブラウザのIE7.0によるものかもしれないので
試したいと思います。
結果はまたご報告します。

http://support.microsoft.com/kb/932823/ja
まつじん
ベテラン
会議室デビュー日: 2005/12/02
投稿数: 54
投稿日時: 2007-04-23 16:18
今、Microsoftに記述されていた回避策を試したところ無事ダウンロード出来ました。
一応、Sleipirで試しても大丈夫でした。
まさかブラウザが原因だとは盲点でした。
お騒がせしてすみませんでした。
そして、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)