[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 メーリングリストの案内