Velocity模版引擎的小例子(so easy)

package com.bcgogo.product.model;

import org.apache.velocity.*;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.resource.loader.StringResourceLoader;
import org.apache.velocity.runtime.resource.util.StringResourceRepository;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Properties;

/**
 * Created by IntelliJ IDEA.
 * User: WWW
 * Date: 12-9-3
 * Time: 上午9:58
 * To change this template use File | Settings | File Templates.
 */
public class Example {
  public Example() {
    try {
      /*
      * setup
      */
      Properties p = new Properties();
      p.setProperty("runtime.log", "velocity.log");
      p.setProperty(VelocityEngine.RESOURCE_LOADER, "string");
      p.setProperty("string.resource.loader.class", "org.apache.velocity.runtime.resource.loader.StringResourceLoader");
      Velocity.init(p);
      /*
      *  Make a context object and populate with the data.  This
      *  is where the Velocity engine gets the data to resolve the
      *  references (ex. $list) in the template
      */

      VelocityContext context = new VelocityContext();
      context.put("list", getNames());

      StringResourceRepository repo = StringResourceLoader.getRepository();

      String myTemplateName = "goodsStoragePrint";

      String myTemplate = "#set( $this = \"Velocity\")" +
          "$this is great!" +
          "#foreach( $name in $list )" +
          "    $name is great!" +
          "#end" +
          "#set( $condition = true)" +
          "#if ($condition)" +
          "    The condition is true!" +
          "#else" +
          "    The condition is false!" +
          "#end";

      //模板资源存放 资源库 中
      /**\
       *       myTemplateName资源名称
       *       myTemplate 资源内容
       */
      repo.putStringResource(myTemplateName, myTemplate);

      /*
      *  get the Template object.  This is the parsed version of your
      *  template input file.  Note that getTemplate() can throw
      *   ResourceNotFoundException : if it doesn't find the template
      *   ParseErrorException : if there is something wrong with the VTL
      *   Exception : if something else goes wrong (this is generally
      *        indicative of as serious problem...)
      */

      Template template = null;

      try {
        template = Velocity.getTemplate(myTemplateName);
      } catch (ResourceNotFoundException rnfe) {
        System.out.println("Example : error : cannot find template "  );
      } catch (ParseErrorException pee) {
        System.out.println("Example : Syntax error in template " + ":" + pee);
      }

      /*
      *  Now have the template engine process your template using the
      *  data placed into the context.  Think of it as a  'merge'
      *  of the template and the data to produce the output stream.
      */

      BufferedWriter writer = new BufferedWriter(
          new OutputStreamWriter(System.out));

      if (template != null)
        template.merge(context, writer);

      /*
      *  flush and cleanup
      */

      writer.flush();
      writer.close();
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public ArrayList getNames() {
    ArrayList list = new ArrayList();

    list.add("ArrayList element 1");
    list.add("ArrayList element 2");
    list.add("ArrayList element 3");
    list.add("ArrayList element 4");

    return list;
  }

  public static void main(String[] args) {
    Example t = new Example();
  }
}
 

你可能感兴趣的:(velocity)