【Java】【Velocity】Apache Velocity ~VTL(Velocity Template Language)編~

はじめに

http://blogs.yahoo.co.jp/dk521123/34456704.html
で、Velocity の設定と簡単な使い方は分かったので、
次に、テンプレートの基本的な使い方を学ぶ

※ 設定などは、上記の関連記事で行っておくこと

VTL(Velocity Template Language)とは

 * Velocity で使うテンプレートファイルで使用する言語
 * if文やループなどができる

文法

コメント

■1行コメント
 * 「##」にする

■複数行コメント
 * 「#* *#」で囲む

繰り返す

 * 構文は、以下のようなイメージ。

#foreach (<リファレンス変数> in <リファレンスまたは配列>)
...
#end

if文

 * 構文は、以下のようなイメージ。

#if (<条件式>)
...
#end

値の設定:#set

 * 構文は、以下のようなイメージ。

#set ($<変数> = <設定値>)

サンプル

VtlSample.java

import java.io.StringWriter;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

public class VtlSample {
   private static String TEMPLATE_FILE_DIRECTORY = 
         "C:/Develop/workspace/SampleJavaCodes/templates";
   
   public static void main(String[] args) {
      StringWriter writer = new StringWriter();

      try {
         Velocity.setProperty("file.resource.loader.path",
               TEMPLATE_FILE_DIRECTORY);
         Velocity.init();
         
         VelocityContext context = new VelocityContext();
         SampleVtlMessageBean messageBean = new SampleVtlMessageBean();
         messageBean.setUserName("Mike");
         messageBean.setDate("2015-01-08");
         SampleProductBean productBean1 = new SampleProductBean();
         productBean1.setProductId("111-222");
         productBean1.setProductName("Java Program Book");
         productBean1.setPrice(1000);
         messageBean.addProduct(productBean1);
         SampleProductBean productBean2 = new SampleProductBean();
         productBean2.setProductId("333-444");
         productBean2.setProductName("C++ Program Book");
         productBean2.setPrice(2500);
         messageBean.addProduct(productBean2);
         SampleProductBean productBean3 = new SampleProductBean();
         productBean3.setProductId("555-666");
         productBean3.setProductName("C# Program Book");
         productBean3.setPrice(3400);
         messageBean.addProduct(productBean3);
         
         context.put("msgBean", messageBean);
         Template tmplate = Velocity.getTemplate("SampleVtlTemplete.vm", "MS932");
         tmplate.merge(context, writer);
      } catch (Exception ex) {
         ex.printStackTrace();
      }

      System.out.println("[出力結果]");
      System.out.print(writer.toString());
   }
}

SampleVtlMessageBean.java

import java.util.ArrayList;
import java.util.List;

public class SampleVtlMessageBean {
   private String userName;
   private String date;
   private List<SampleProductBean> products;

   public SampleVtlMessageBean() {
      this.products = new ArrayList<>();
   }
   
   public void setUserName(String userName) {
      this.userName = userName;
   }

   public String getUserName() {
      return userName;
   }

   public String getDate() {
      return date;
   }

   public void setDate(String date) {
      this.date = date;
   }

   public List<SampleProductBean> getProducts() {
      return products;
   }

   public void addProduct(SampleProductBean product) {
      this.products.add(product);
   }
}

SampleProductBean.java

public class SampleProductBean {
   private String productId;
   private String productName;
   private int price;
   
   public String getProductId() {
      return productId;
   }

   public void setProductId(String productId) {
      this.productId = productId;
   }

   public String getProductName() {
      return productName;
   }

   public void setProductName(String productName) {
      this.productName = productName;
   }

   public int getPrice() {
      return price;
   }

   public void setPrice(int price) {
      this.price = price;
   }
}

出力結果

Mike 様
                                       2015-01-08
 この度はお買い上げ頂き、誠にありがとうございます。

【商品】
商品ID : 111-222
商品名   : Java Program Book
価格       : 1000
---------------------------------------
商品ID : 333-444
商品名   : C++ Program Book
価格       : 2500
---------------------------------------
商品ID : 555-666
商品名   : C# Program Book
価格       : 3400

以上


関連記事

Apache Velocity ~入門編~

http://blogs.yahoo.co.jp/dk521123/34456704.html

Velocity を Servlet で使用するには

http://blogs.yahoo.co.jp/dk521123/34460303.html