ファイルダウンロード?
昨日までので新しいウィンドウを開くことはできたんだけど、そこにexcelとかpdfとかを表示したくなったので、いろいろ調べてこんな風にした。
FacesContext context = FacesContext.getCurrentInstance(); HttpServletResponse res = (HttpServletResponse) context.getExternalContext().getResponse(); res.setContentType("application/pdf"); try { OutputStream out = res.getOutputStream(); writePdf(out); out.flush(); out.close(); } catch (IOException e) { // TODO 例外処理 e.printStackTrace(); } context.responseComplete(); return null;
参考:http://forum.java.sun.com/thread.jspa?forumID=427&threadID=599946
↑のコードのまんまやな。これをActionのメソッドに記述すればOK。当然っちゃ当然だけど、teedaでもこのまま動くっぽい。
http://www.seasar.org/wiki/index.php?FAQ%2FS2JSF#eea82682
↑ここを見るとFacesContextはinjectionするといいみたい。確かにテストのことを考えるとMockに差し替えたりしやすいのでその方がよさそうだ。
でもs2jsf使ってるのにFacesContextを直接使うのはちょっとイヤだなぁ。中身わかってないから副作用がこわい。「responseCompleteなんて呼んじゃっていいの?」みたいな。この辺も隠蔽して「こんなに簡単にできますよー」ってしてくれると易しさにうっとりしそう(笑)。