- PR -

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

投稿者投稿内容
わんこ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 46
投稿日時: 2005-06-27 13:38
「単にダウンロード対象のファイルの中身をレスポンスに書き出して、それ以上書き出されたくないのでフォーワード先を空白ページにしているだけ」、ということは結局masaさんが言っていることを行っていることになるのでは?ブランクページにしろ、responseにファイルの中身を書き出して、その後遷移してるってことですよね。

JSFは私も良くわかりませんが、ちょっと見たところ、
return "success"みたいな感じでやるんですよね
だったら、
return nullとか試してみました?
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-27 14:01
わんこさんこんにちは。

>return nullとか試してみました?
他にはアクションメソッドの戻り値をvoidとしてみたり、
いろいろ試しましたがダメでしたT-T
なので
return "blank";
として、空白ページを遷移先に指定するようにしました。
遷移先を指定しているだけで、実際の画面は元の画面のままなのです。
フォワード先の画面の出力が全てダウンロードファイルに出力されるので、これで一応ファイルの内容だけが書き出されるようになりました。
わんこ
常連さん
会議室デビュー日: 2003/04/30
投稿数: 46
投稿日時: 2005-06-27 14:10
実際の画面が元のままなのはわかっています。

そのフォワード先で指定したjspのhtmlがファイルに書き込まれるってことですよね

う〜ん
なんか気持ち悪くて納得いきません
その"blank"で指定しているところを
<to-view-id></to-view-id>
のように何も指定しない、とかでも駄目かな

なんとか解決してほしいなぁ・・・
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-27 15:06
><to-view-id></to-view-id>
>のように何も指定しない、とかでも駄目かな

これはやってなかったので、試してみました。
結果は、download.jsf(遷移元の画面、ホントのファイル名はdownload.jsp)
をダウンロードしようとするようになってしまいました。
もちろんアップロードディレクトリにはそんなファイルないので失敗します。

もう意味がわかりません;;
mone
常連さん
会議室デビュー日: 2005/05/18
投稿数: 37
投稿日時: 2005-06-27 15:26
こんにちは、moneです。
引用:

return nullとか試してみました?
他にはアクションメソッドの戻り値をvoidとしてみたり、
いろいろ試しましたがダメでしたT-T
なので
return "blank";
として、空白ページを遷移先に指定するようにしました。


これを試した際にどのように「ダメ」だったのでしょうか?
遷移先の画面が指定されていないからJSFが勝手になんか処理しちゃったのかな?

引用:

結果は、download.jsf(遷移元の画面、ホントのファイル名はdownload.jsp)
をダウンロードしようとするようになってしまいました。


これは、どこの画面からきたのかはわかっているから
何も指定しなかった場合もとの画面に戻るように
勝手にJSFが遷移もとのパスを渡しちゃってるのかもしれないですね。

あと、元の画面を再読み込みしなければならないという件ですが
モーダルダイアログ等をはさんで
そこから自動でダウンロード処理の呼び出し、
ダイアログには閉じる機能のみを実装
という形でなんとかなりませんかね?
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-27 15:40
moneさんこんにちは。

>これを試した際にどのように「ダメ」だったのでしょうか?
>遷移先の画面が指定されていないからJSFが勝手になんか処理しちゃったのかな?

そのとおりで、遷移先が指定されていないと元の画面に遷移するため、ダウンロードしたファイルの末尾に遷移もとのHTMLソースが出力されました。

>これは、どこの画面からきたのかはわかっているから
>何も指定しなかった場合もとの画面に戻るように
>勝手にJSFが遷移もとのパスを渡しちゃってるのかもしれないですね。

そのようですね。なんか
response.setHeader("Content-Disposition"・・・・
でセットしたファイル名が上書きされているような感じです。

>あと、元の画面を再読み込みしなければならないという件ですが
>モーダルダイアログ等をはさんで
>そこから自動でダウンロード処理の呼び出し、
>ダイアログには閉じる機能のみを実装
>という形でなんとかなりませんかね

なるほど、それならダイアログを閉じた後に元画面をサブミットするなりして処理できそうですね。
参考にさせていただきます。
ありがとうございます。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-06-27 15:43
引用:

以下ダウンロード処理のソースです。
------------------------------------------------------------------------
response.setContentType(getContentType(fileName));
...
output.close();
input.close();
---------------------------------------------------------------ソースここまで
かる方がいらっしゃいましたらご教授願います。


これはh:commandButtonから呼び出されるアクションメソッドの処理でしょうか?
最後にFacesContext.getCurrentInstance().responseComplete();をやらないと,
この後,RenderResponseフェーズに入って,次の画面のjspへフォワードされて,
たぶん同じresponseに書き込みが起きるのだと思います.
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-06-27 15:48
引用:

ただ、JSFでどうしてもフォーワード処理をスキップする方法が見つからなかったのでしょうがなく行った処理です。


さきほどは,2〜3頁目があるのに気付かないで返信してました.

スキップする方法はFacesContext.getCurrentInstance().responseComplete();です.

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