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に指定してあげて返してるだけ。
前に載せたアップロードと同じ事をやってるだけ。