- PR -

テキストファイルダウンロードでJSPの出力が含まれる

投稿者投稿内容
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-23 17:43
すいません誤字が多かったので訂正します。

× 文字列をリターンしければ次画面に遷移する
○ 文字列をリターンしなければ自画面に遷移する
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-06-23 17:55
引用:

takashiさんの書き込み (2005-06-23 17:40) より:
JSFではStrutsのように"success"等の文字をリターンすることで画面遷移を行い、



JSFは使用したことがないのですが、strutsで同様の処理を書くならば、
return mapping.findForward(null);
の記述となります。

引用:

文字列をリターンしなければ自画面に遷移するのでかならずフォーワードされることになるのでしょうか??



この認識は誤りで、自画面に遷移するのではなく、レスポンスが
OutputStreamにwriteされた内容になります。
(結果としてファイルダウンロードダイアログなどが開きます。)
と、いうことで、
return mapping.findForward(null);
に該当するような記述をしてみることで解決するのではないで
しょうか。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-23 18:25
何度もご返答ありがとうございます。

masaさんやmoneさんのおっしゃる通り、
ダウンロード処理でsetContentTypeにてヘッダをダウンロード用に変更したまま、
その後のフォーワード処理が行われることで、引き続きダウンロードファイルへ
レスポンスを出力してしまうことでこのような現象になっている、という考え方が
正しいようです。

ちなみにダウンロード処理が終わった後にContentTypeを戻してみましたが、
画面にテキストファイルの内容が出てしまいました^−^;

考え方が分かったので、「return mapping.findForward(null);」などを参考に調査してみます。

どうもありがとうございます。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-24 14:08
いろいろ試してみましたが、blank.jspという空のファイルを作成してダウンロード後にそこへ遷移する方法にしました。
ただこれだと、元の画面を再読み込みしないと続けてダウンロードできないのですが^−^;

あと、ただのダウンロードファイルのリンクにして右クリックでダウンロードさせようとすると日本語ファイルが無理でした。

JSF…
まだまだ使いこなすためには勉強が必要なようです。。。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-06-24 14:45
こんにちは。

引用:

takashiさんの書き込み (2005-06-24 14:08) より:
いろいろ試してみましたが、blank.jspという空のファイルを作成してダウンロード後にそこへ遷移する方法にしました。



ん?ちょっと待って下さい。これは一つのリクエストに対して、複数
のレスポンスを設定出来ているということですか?

具体的には、
1.ブラウザからダウンロードボタンをクリック。
2.ファイルダウンロードダイアログが出力すると共に「画面も遷移」。
の動作をしているのでしょうか。

もしそうだとして、かつブラウザに「IE」を使用しているとするなら
ば、その方法を是非教えて頂きたいです。
「IE」においてマルチパートレスポンスを実現させる手段は存在しな
いと私は認識していたので、これが出来るとなると大きな衝撃を受け
ることになります。今まで出来なかった、あんなことやこんなことが
実現出来るようになります!
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-24 15:49
いえ、遷移はしてません^−^;
ただ、JSFでどうしてもフォーワード処理をスキップする方法が見つからなかったのでしょうがなく行った処理です。
単にダウンロード対象のファイルの中身をレスポンスに書き出して、それ以上書き出されたくないのでフォーワード先を空白ページにしているだけです。

なので、ブラウザ上では画面は元のままです。しかし、一度別ページに遷移したことになっているので、新たにダウンロード処理を行うために画面を再読み込みしなければならない状況になっております。

ぬか喜びさせてしまって申し訳ありません。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-06-24 16:31
引用:

takashiさんの書き込み (2005-06-24 15:49) より:
いえ、遷移はしてません^−^;
ただ、JSFでどうしてもフォーワード処理をスキップする方法が見つからなかったのでしょうがなく行った処理です。
単にダウンロード対象のファイルの中身をレスポンスに書き出して、それ以上書き出されたくないのでフォーワード先を空白ページにしているだけです。



なるほど^^;
JSFについてちょこっと調べてみましたが、情報が少ないみたいですね。
頑張って下さい!
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-24 16:51
ありがとうございます^−^

そうですねー、まだ情報は多くないですね。早くStrutsくらい広まればいいですけど。
実はこのスレッドでの質問は仕事でJSFを使用して発生したわけではなく、プライベートでの使用で発生したものなのです。
まだ実務で使うには怖いですね。。。

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