Aipo の Velocity テンプレートから文章を作成する方法

Velocity テンプレートは主に HTML を作成する際に利用していますが、メールなどの文章をテンプレート化したい場合などに利用することもできます。

public static String createTextFromTemplate(String vmPath,
      Map<String, Object> putParams) {
    StringWriter out = null;
    try {
      VelocityService service =
        (VelocityService) ((TurbineServices) TurbineServices.getInstance())
          .getService(VelocityService.SERVICE_NAME);
      Context context = service.getContext();
      Iterator<Entry<String, Object>> iterator =
        putParams.entrySet().iterator();
      while (iterator.hasNext()) {
        Entry<String, Object> next = iterator.next();
        context.put(next.getKey(), next.getValue());
      }
      out = new StringWriter();
      service.handleRequest(context, vmPath, out);
      out.flush();
      return out.toString();
    } catch (Exception e) {
      logger.error(e.getMessage(), e);
      return null;
    } finally {
      if (out != null) {
        try {
          out.close();
        } catch (IOException e) {
          // ignore
        }
      }
    }
  }

一つ目の引数に Velocity テンプレートへのパス、二つ目の引数にテンプレートに受け渡したいパラメータを指定します。

この方法で String の文字列として Velocity の出力結果を受け取ることができるようになります。