Struts2でのCSVダウンロード方法(その1)

一時ファイルに出力する場合としない場合で2通り出来たのでメモ。
今回は一時ファイル無しver。

ServletResponseAwareがいきなり出てきて気持ち悪いですが、メモなので気にしない。
●Action

@Results({
    @Result(name = "download", location = "download.jsp")
})
@Controller
public class DownloadAction extends ActionSupport implements
        ModelDriven<DownloadModel>, ServletResponseAware {

    /** デフォルトシリアルバージョンID. */
    private static final long serialVersionUID = 1L;

    private HttpServletResponse response;
    
    /** モデル. */
    private DownloadModel model = new DownloadModel();

    public String output() throws SQLException {
        List<String> resultLest = new ArrayList<String>();  //普通に結果をとってくる。
        model.setResultList(resultLest);
        response.setContentType("application/octet-stream;charset=UTF-8");  //←無くても動いたけど。
        response.setHeader("Content-Disposition","attachment; filename=ふぃ.csv");
        return "download";
    }

    @Override
    public DownloadModel getModel() {
        return model;
    }

    public void setServletResponse(HttpServletResponse response){
        this.response = response;
      }

      public HttpServletResponse getServletResponse(){
        return response;
      }

}

jsp

<%@ page contentType="text/csv; charset=UTF-8" trimDirectiveWhitespaces="true" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:iterator value="resultList" var="result" status="stat">
  <s:property value="param1" />, <s:property value="param2" />, <s:property value="param3" />
</s:iterator>

やってることはヘッダーをCSVに指定してあげて返してるだけ。
前に載せたアップロードと同じ事をやってるだけ。