009-10-09
■[Seasar2]S2Fisshplateを使ってみる
今の案件では,Excelを帳票として出力する機能があるんですが,POIでポイポイするのは結構大変・・・。しかも,何だかズイブンと複雑なExcel帳票を依頼されたので,何とか工数を削減出来ないものかと,id:gokingさんにヘルプを頼んでみました。
そこで候補として上がったのがFisshplateで,S2Fisshplateなんてものまであったんで,導入してみようと思いホゲホゲしてみた(実際にホゲホゲしたのはgokingさんなんですけどねw)
そもそもFisshplateって何じゃらホイ?
Fisshplateとは,Excelにテンプレート式を記述して,テンプレート式を元に動的にデータを出力しちゃおうというライブラリです。
埋め込みデータ
動的に値をテンプレートに出力するには,
${hoge} ${foo.hoge}
プログラム側からは,Mapで渡してキー文字列がテンプレートのバインド変数となり,値を参照する事が出来ます。JavaBeansの場合はプロパティを参照(ネストもOKっぽい)出来るようです。(getterが必要)
テンプレート式
文法(テンプレート式)には,以下のようなものがあります。
- foreach
- hforeach
- while
- if
- pageBreak
- pageHeaderStart
- pageFooterStart
- スクリプト実行
- 変数の評価の遅延
- ハイパーリンク埋め込み
- コメント
独自タグ(テンプレート式)
独自にタグも作成できるらしく,「要素クラス」と「パースクラス」のペアを作成して,「FPTemplate」クラスにaddしてあげればOKみたい。
S2Fisshplate
S2Fisshplateは,S2とFisshplateを連携させて,インタフェースを定義するだけでFisshplateの機能を使う事が出来ます。S2FisshplateはS2Containerに非依存との事。
基本的には,Fisshplateと利用方法は一緒なんですが,規約に沿った形で作らないと処理されません。(インターフェースとExcelテンプレートのファイル名とか)
テンプレートに埋め込むDtoのプロパティは,「プロパティのsetter、getterを必ず作って下さい。publicフィールドの動作は確認していません。」との事でしたが,サンプルで動かしたDtoはpublicフィールドでも動作しました。ただ,確認していないとの事なので,setter/getterは用意した方が良いかも。
何となく思った事
Fisshplateは決まりきったテンプレートに対して,値を動的に出力する場合には威力を発揮すると思います。ただ,複雑怪奇なテンプレートに対して適用すると返って大変になりそうなので,複雑なテンプレートに対しては,Fisshplateを部分的に利用して,後は素のPOIでポイポイした方が良いような気がします。
また,縦方向の繰り返しには強いんですが,横方向の繰り返しはちょっと弱いようなので,そういった部分でも利用には注意が必要かもです。
댓글 없음:
댓글 쓰기