[Seasar-user:3977] Re: S2JSFでテキストファイルのダウンロード
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2006年 6月 27日 (火) 21:33:19 JST
米林です。
From: "T.Hattori" <[E-MAIL ADDRESS DELETED]>
Sent: Tuesday, June 27, 2006 8:16 PM
> こんにちは hattori と申します。
>
> S2JSFでテキストファイルのダウンロードをしようと考えているのですが、
> ダウンロードしたテキストの後ろにHTMLが含まれてしまい悩んでいます。
>
> <アクションのメソッド>
> public String downloadCsvFiel() {
>
> ExternalContext context =
> FacesContext.getCurrentInstance().getExternalContext();
> HttpServletResponse response = (HttpServletResponse)
> context.getResponse();
> response.setContentType("application/octet-stream");
> response.setHeader("Pragma", "");
> response.setHeader("Cache-Control", "");
> response.setHeader("Content-disposition","attachment;
> filename=test.csv");
>
> List list = dataManagerLogic.getDownloadDetails(downloadDetails);
> try {
> PrintWriter out = response.getWriter();
> HogeData hogeData;
> for (Iterator ite = list.iterator(); ite.hasNext();) {
> hogeData = (HogeData) ite.next();
> // CSV生成
> CSVBuilder builder = CSVBuilder(hogeData);
> out.println(builder.getCsvLine());
> }
> out.close();
> } catch (IOException e) {
> e.printStackTrace();
> }
> return null;
> }
下記のようにしてみてください。
// responseは取りに行かずDIしてもらう
private HttpServletResponse response;
public void setResponse(HttpServletResponse response) {
this.response = response;
}
アクションのメソッド
public String hogeAction() {
response.setContentType("application/octet-stream");
response.setHeader("Pragma", "");
response.setHeader("Cache-Control", "");
response.setHeader("Content-disposition","attachment;
filename=test.csv");
List list = dataManagerLogic.getDownloadDetails(downloadDetails);
try {
PrintWriter out = response.getWriter();
HogeData hogeData;
for (Iterator ite = list.iterator(); ite.hasNext();) {
hogeData = (HogeData) ite.next();
// CSV生成
CSVBuilder builder = CSVBuilder(hogeData);
out.println(builder.getCsvLine());
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
// これを追加
FacesContext.getCurrentInstance().responseComplete();
return null;
}
Seasar-user メーリングリストの案内