Top / Java / Velocity

Jakarta Velocity は汎用のテンプレートエンジンです。あらかじめテンプレートファイルを用意しておきそれに変数を仕込んでおいて、プログラムから変数部分のデータを渡してあげることで動的に画面や帳票を作成します。汎用というだけあって、htmlやXMLなどだけでなく任意のテキストを出力することができます。

ダウンロード・インストール

インストールは Jakarta Velocity よりモジュールをダウンロードし、必要なクラスパスにパスを通すだけです。2006/12/27現在

が直近版みたいです。

使ってみる

やってみます。モデルはUser,CustomerというHibernate/マッピング定義についてで書いたモデルを使用します。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です。
    連絡先:東京都江東区

なんだかすごく簡単にテンプレート内の値を置換して出力することができました。


この記事は

選択肢 投票
おもしろかった 7  
そうでもない 2  
  • 時間なし!きょうはここまで。。 -- きの? 2006-12-28 02:11:27 (木)

Top / Java / Velocity

現在のアクセス:10979


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-31 (火) 11:14:48 (2089d)