JSF+CDIでCSVダウンロード機能を実装するときの処理です。
結構、汎用的でいろんなところででてきますね。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
HttpServletResponse res = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); String encoding ="Windows-31J" res.setContentType("text/html; charset="+encoding); res.setHeader("Content-Disposition", "attachment; filename=\"ファイル名\""); PrintWriter w = null; try { w = res.getWriter(); } catch (IOException ex) { Logger.getLogger(ProductListBean.class.getName()).log(Level.SEVERE, null, ex); } String csvStr = "\"id\",\"name\"\n\"1\",\"norio\""; //ここでCSV文字列を入力します w.print(csvStr); //これをいれないとcsvにHTMLが混在してしまいます。 FacesContext.getCurrentInstance().responseComplete(); } |
HTTPのヘッダーのパラメータを変えるところがポイントです。
ちなみにJSFだと一番最後の処理
FacesContext.getCurrentInstance().responseComplete();
を入れないとCSVが正常に出力されません。