コンテンツへスキップ

SAStrutsでCSVダウンロード機能をつくる(S2CSV)

はじめに

SAStrutsでとあるURLを叩かれたら

サービスからデータを取得してCSVをダウンロードする

この流れをS2CSVを使って簡単に作ってみる

 

S2CSVのセットアップ

jarのダウンロードとセット

公式サイトからダウンロード

ダウンロードしたjarをWEB-INF/libにコピーして

Buildパスに追加

 

dicon設定

各diconに以下を追記する

app.dicon

  <include path="s2csv.dicon"/>

creator.dicon

    <component class="org.seasar.s2csv.creator.CsvCreator"/>

customizer.dicon

<component name="csvCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"/>

 CSVレイアウトの定義

CSV出力する為の枠をclassに定義。

classはルートパッケージ直下にXxxxxxCsvのように

終わりがCsvになるよう命名。

コードのサンプル

package hoge;

import org.seasar.s2csv.csv.annotation.column.CSVColumn;
import org.seasar.s2csv.csv.annotation.entity.CSVEntity;

@CSVEntity(header=true)
public class MailDetailCsv {

  @CSVColumn(columnIndex=0, columnName="送信内容")
  public String sousinNaiyou;

  @CSVColumn(columnIndex=1, columnName="送信日時")
  public String sousinDatetime;

  @CSVColumn(columnIndex=3, columnName="送信元メールアドレス")
  public String sousinmotoMa;

}

 ダウンロードActionの作成

Actionクラスにダウンロード用のAction methodを作成。

以下、サンプルのようにすればOK

  @Execute(validator = false)
  public String download() {

    List<BeanMap> data = //ここでサービスを呼び出し、データを取得

    // map -> s2csv
    List<MailDetailCsv> csvList = new ArrayList<MailDetailCsv>();

    for (BeanMap row : data) {
      MailDetailCsv csv = new MailDetailCsv();
      BeanUtil.copyProperties(row, csv);
      csvList.add(csv);
    }

    // send csv
    try
    {

      ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
      OutputStreamWriter writer = new OutputStreamWriter(os, "Shift_JIS");

      S2CSVWriteCtrl<MailDetailCsv> csvWriter
        = s2csvCtrlFactory.getWriteController(MailDetailCsv.class, writer);

      csvWriter.writeAll(csvList);
      writer.close();

      byte[] byteArray = os.toByteArray();
      ByteArrayInputStream is = new ByteArrayInputStream(byteArray);

      ResponseUtil.download("mailLogs.csv", is, byteArray.length);

    } catch(Exception e) {
      e.printStackTrace();
    }

    return null;
  }

あとはURLを叩けば完成!

S2CSVで簡単にCSVファイルを作成。

 

コメントを残す

メールアドレスが公開されることはありません。