- PR -

JSFにてCSV出力を行いたい!!

1
投稿者投稿内容
T_T
常連さん
会議室デビュー日: 2005/07/20
投稿数: 20
投稿日時: 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/05
投稿数: 613
投稿日時: 2005-08-11 20:24
javax.faces.context.ExternalContext#getResponse()
javax.faces.context.FacesContext#responseComplete()

このあたりを使ってできます。
getResponse()はHttpServletならHttpServletResponseを返します。
responseComplete()を呼ぶとJSFは一切のレンダリングを行わなくなります。
T_T
常連さん
会議室デビュー日: 2005/07/20
投稿数: 20
投稿日時: 2005-08-18 20:20
早速回答いただいたのに
返答が遅れまして申し訳ございません。

ご教授いただきましたgetResponse()を使用して
やってみます。

getResponse()を教えていただく前に、強引かもしれませんが
空のHandlerと空のビジネスロジックを通して
CSV作成用のJSPに遷移させてそこでCSV出力用のダイアログを
出力するという風にやってみました。
ダイアログの出力ができるにはできたのですが
ダイアログにて保存なり開くなりの処理を行い、
ダイアログが閉じてしまった後に画面上にある任意のボタンを
押すとまたファイルの保存ダイアログが表示されてしまいます。
どうも前回のActionをもう一度行ってしまっているような
感じです。
JSFのライフサイクルを外れてしまっているために
こういう状態が起こるのかどうかは定かではありません。
これについては、どなたかお分かりの方
いらっしゃいますでしょうか?

getResponse()を使用してやってみてできないようであれば
JSPよりCSV作成用のサーブレットを直接呼ぶように
しようと考えています。
ですが、JSFのJSPからサーブレットってどのように
呼ぶのでしょうか??

わからないことだらけですいません。
どなたかご教授ください。
よろしくお願いします。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-08-19 09:36
引用:
getResponse()を教えていただく前に、強引かもしれませんが
空のHandlerと空のビジネスロジックを通して
CSV作成用のJSPに遷移させてそこでCSV出力用のダイアログを
出力するという風にやってみました。


もう少し具体的にコードを示していただけるとわかりやすいのですが...

引用:
ですが、JSFのJSPからサーブレットってどのように
呼ぶのでしょうか??


以下のいずれかをアクション内で実行します.
(1) forwardする場合
 FacesContext ctx = FacesContext.getCurrentInstance();
 ctx.getExternalContext().dispatch("PATH");
 ctx.responseComplete();

(2) redirectする場合
 FacesContext ctx = FacesContext.getCurrentInstance();
 ctx.getExternalContext().redirect("URL");
 // responseComplete()は不要です.

1

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