- - PR -
JSFにてCSV出力を行いたい!!
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-11 19:02
いつもお世話になっています。
JSF+Tomcat5にてシステム開発を行っています。 ここで、CSV出力のやり方がわかりません。 Strutsの時のように // コンテンツタイプ, ヘッダーの設定 response.setContentType("csv/plain;charset=Shift_JIS"); response.setHeader("Content-Disposition","attachment;filename="+csvfile); // CSVファイル パスの取得 ServletContext context = this.getServletContext(); String path = context.getRealPath("/")+ "data/csvout/"; // ファイルをバイト単位で応答オブジェクトに転送 File fileToDownload = new File(path + csvfile); FileInputStream fileInputStream = new java.io.FileInputStream(fileToDownload); int i; while ((i=fileInputStream.read())!=-1){ out.write(i); } fileInputStream.close(); out.close(); という風にやりたいだけなんですが、 どうしてもresponse.setContentTypeや response.setHeader、等のやり方がわかりません。 勉強不足でお恥ずかしいですが ご存知の方、いらっしゃいましたら ご教授頂ければ幸いです。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-08-11 20:24
javax.faces.context.ExternalContext#getResponse()
javax.faces.context.FacesContext#responseComplete() このあたりを使ってできます。 getResponse()はHttpServletならHttpServletResponseを返します。 responseComplete()を呼ぶとJSFは一切のレンダリングを行わなくなります。 | ||||||||
|
投稿日時: 2005-08-18 20:20
早速回答いただいたのに
返答が遅れまして申し訳ございません。 ご教授いただきましたgetResponse()を使用して やってみます。 getResponse()を教えていただく前に、強引かもしれませんが 空のHandlerと空のビジネスロジックを通して CSV作成用のJSPに遷移させてそこでCSV出力用のダイアログを 出力するという風にやってみました。 ダイアログの出力ができるにはできたのですが ダイアログにて保存なり開くなりの処理を行い、 ダイアログが閉じてしまった後に画面上にある任意のボタンを 押すとまたファイルの保存ダイアログが表示されてしまいます。 どうも前回のActionをもう一度行ってしまっているような 感じです。 JSFのライフサイクルを外れてしまっているために こういう状態が起こるのかどうかは定かではありません。 これについては、どなたかお分かりの方 いらっしゃいますでしょうか? getResponse()を使用してやってみてできないようであれば JSPよりCSV作成用のサーブレットを直接呼ぶように しようと考えています。 ですが、JSFのJSPからサーブレットってどのように 呼ぶのでしょうか?? わからないことだらけですいません。 どなたかご教授ください。 よろしくお願いします。 | ||||||||
|
投稿日時: 2005-08-19 09:36
もう少し具体的にコードを示していただけるとわかりやすいのですが...
以下のいずれかをアクション内で実行します. (1) forwardする場合 FacesContext ctx = FacesContext.getCurrentInstance(); ctx.getExternalContext().dispatch("PATH"); ctx.responseComplete(); (2) redirectする場合 FacesContext ctx = FacesContext.getCurrentInstance(); ctx.getExternalContext().redirect("URL"); // responseComplete()は不要です. |
1