- PR -

ファイルのダウンロードとリロードを同時に行う

1
投稿者投稿内容
ただめし
会議室デビュー日: 2005/03/01
投稿数: 5
投稿日時: 2005-03-01 11:52
はじめまして。いつも参考にさせて頂いてます。

現在、サーブレット、JSPを使用した、Javaのオープン系の開発を行っています。
その中で、PrintWriterオブジェクトを使用したCSVファイルのダウンロード(データはDBより取得してサーブレットで編集)と、画面のリロードを同時に行いたいと考えています。

DBにCSV出力済みのフラグがあり、CSV出力のタイミングでUPDATEするのですが、
この項目が画面に表示されているためです。

何かよい案はあるでしょうか?
よろしくお願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-03-01 15:01
ダウンロード -> 画面表示は無理だと思いますが、逆ならJavascriptなりMETAタグを
使えばできそうに思います。
ただめし
会議室デビュー日: 2005/03/01
投稿数: 5
投稿日時: 2005-03-01 15:57
uk様、ありがとうございます。

やはり一度のリクエストで、ダウンロードと画面のリロードはできないようですね。

よく考えてみると、ダウンロードダイアログでキャンセルした場合もCSV出力済みフラグを更新してしまっています。
珍しい処理では無いように感じるのですが、これといった解決策は無いのでしょうか?

実現したい仕様は以下のようなものです。
1.ダウンロードダイアログで保存した場合のみ、DBのCSV出力済みフラグを更新する。
2.DBのCSV出力済みフラグを更新した場合、画面を再表示する。

よろしくお願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-03-01 16:11
引用:

ただめしさんの書き込み (2005-03-01 15:57) より:
よく考えてみると、ダウンロードダイアログでキャンセルした場合もCSV出力済みフラグを更新してしまっています。
珍しい処理では無いように感じるのですが、これといった解決策は無いのでしょうか?


ブラウザがダイアログを出している時点でサーバ側の処理は終わっていますので無理ですね。
それがまずいのであれば、リッチクライアントを使うなどの解決策を考える必要があるでしょう。
ただめし
会議室デビュー日: 2005/03/01
投稿数: 5
投稿日時: 2005-03-01 16:29
やはりそうですか…。
リッチクライアント、仕様も含めて、再検討してみることにします。
uk様、ありがとうございました。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-03-01 20:49
仕様の再検討が必要だと思いますが、

例えば、
1)ダウンロードの指示をクライアントが行う
  (サブミットボタン等)
2)データベースを更新しながら、サーバ側(httpでアクセス可能な場所)にCSVを生成する。
3)画面を表示する

CSVの生成以外はよくある画面遷移ですが、(3)の画面生成時に、
(2)で生成したCSVのURLに対して、windowのonloadイベントで
勝手にアクセスするようなJavaScriptを付けてやれば、
画面更新後にダウンロードが可能です。

サーバ側に生成したCSVを後からでもダウンロードできる機能を
別で用意してあげれば、ダウンロードのキャンセルや失敗・再取得も可能ですし、
CSVの生成は1回でOKだと思いますし、本来の要件も満たすことが可能ではないでしょうか。
ただめし
会議室デビュー日: 2005/03/01
投稿数: 5
投稿日時: 2005-03-02 11:08
かつのり様、ありがとうございます。

なるほど!と思いました。考えつかなかったです。
サーバ側でCSV編集したデータを持っていればよいのですね。

要件
1.ダウンロードダイアログで保存した場合のみ、DBのCSV出力済みフラグを更新する。

に関しては、無理ということで調整できました。
おそらく、ダウンロード画面を作成するとか、リッチクライアントを使うとかしないと無理ですよね。

大変勉強になりました。ありがとうございました。
1

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