// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 [[Jakarta Velocity>http://jakarta.apache.org/velocity/]] は汎用のテンプレートエンジンです。あらかじめテンプレートファイルを用意しておきそれに変数を仕込んでおいて、プログラムから変数部分のデータを渡してあげることで動的に画面や帳票を作成します。汎用というだけあって、htmlやXMLなどだけでなく任意のテキストを出力することができます。 ***ダウンロード・インストール [#fc5b64fe] インストールは [[Jakarta Velocity>http://jakarta.apache.org/velocity/]] よりモジュールをダウンロードし、必要なクラスパスにパスを通すだけです。2006/12/27現在 -[[velocity-1.4.tar.gz>http://ftp.kddilabs.jp/infosystems/apache/jakarta/velocity/velocity-1.4/velocity-1.4.tar.gz]] が直近版みたいです。 ***使ってみる [#e099bc30] やってみます。モデルはUser,Customerという[[Hibernate/マッピング定義について>Hibernate/マッピング定義について#j4e88693]]で書いたモデルを使用します。Customerは顧客への参照を持ちます。 -Main.java package nu.mine.kino.velocity; import java.io.StringWriter; import nu.mine.kino.entity.Customer; import nu.mine.kino.entity.User; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; public class Main { public static void main(String args[]) { User user = new User(); user.setName("ユーザ1"); user.setAddress("東京都江東区"); Customer c = new Customer(); c.setName("顧客1"); c.setUser(user); //モデルデータの作成完了 try { Velocity.init();// 初期化 VelocityContext context = new VelocityContext(); context.put("user", user);// オブジェクトをセットできるのがおもしろい。 context.put("customer", c); StringWriter out = new StringWriter(); Template template = Velocity.getTemplate("main.vm", "MS932"); template.merge(context, out); System.out.println(out.toString()); out.flush(); } catch (ResourceNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (ParseErrorException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } -テンプレートファイル(main.vm) お名前:${customer.name} ${customer.name} さまの担当者は${customer.user.name}です。 連絡先:${customer.user.address} ${customer.name}はjavaファイルのcustomerというキー値で渡されたオブジェクトに対応しています。そのオブジェクトのnameプロパティですね。つまり customer.getName(); てことです。お察しの通り${customer.user.name}は customer.getUser().getName(); ってことですね。オブジェクトをそのまま渡すことができて、さらにプロパティにアクセスできるのが楽しいです。。 -実行結果 お名前:顧客1 顧客1 さまの担当者はユーザ1です。 連絡先:東京都江東区 なんだかすごく簡単にテンプレート内の値を置換して出力することができました。 ---- この記事は #vote(おもしろかった[4],そうでもない[1]) -時間なし!きょうはここまで。。 -- [[きの]] &new{2006-12-28 02:11:27 (木)}; #comment #topicpath SIZE(10){現在のアクセス:&counter;}