Wicket:ストリームダウンロード処理
色々試したけど、こんな感じで落ち着きました。
■SubmitLink実装
SubmitLink submit = new SubmitLink("outputButton", form){ @Override public void onSubmit(){ // RequestTarget設定(インナークラス"CSVResourceStreamWriter.write"に処理を委譲) IRequestTarget target = new ResourceStreamRequestTarget( new CSVResourceStreamWriter(), "AccessReport.csv"); getRequestCycle().setRequestTarget(target); } };
■インナークラス(AbstractResourceStreamWriter実装)
class CSVResourceStreamWriter extends AbstractResourceStreamWriter{ /** * OutputStreamによるCSV出力処理を実装する。 * * @param out */ @Override public void write(OutputStream out ) { try{ // outputStreamへの書き出しサンプル String tmp = new String("CSVダウンロードテスト"); byte[] byteArray = tmp.getBytes("UTF-8"); out.write(byteArray); } finally{ try{ out.flush(); out.close(); } catch( IOException iex ){ iex.printStackTrace(); } } } /** * Content-Type要素を定義する。 * * @return */ @Override public String getContentType() { // Conent-Type設定 return "application/octet-stream;charset=UTF-8"; } }
AbstractResourceStreamWriter.write(OutputStream)メソッドの実装部分で、DBからのデータ取得などをやってやれば良いかと。