通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用velocity模板引擎生成 『每日发货单』邮件内容:
一、先定义邮件内容模板:mail-template.vm
<string>用户,您好:</string> <h2>以下是 $date.format('yyyy-MM-dd',$model.deliverDate,$convert.toLocale("en_US")) 的发货清单,请核对!</h2> <ul> #foreach ($item in $model.items) <li>$velocityCount . $item.productName / $item.productNum 件</li> #end </ul>
这里面涉及到二个java类:Order(发货订单)及OrderItem(订单明细)
import java.util.Date; import java.util.List; public class Order { private Date deliverDate; private List<OrderItem> items; public Date getDeliverDate() { return deliverDate; } public void setDeliverDate(Date deliverDate) { this.deliverDate = deliverDate; } public List<OrderItem> getItems() { return items; } public void setItems(List<OrderItem> items) { this.items = items; } }
及
public class OrderItem { private String productName; private int productNum; public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public int getProductNum() { return productNum; } public void setProductNum(int productNum) { this.productNum = productNum; } }
二、使用示例
import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.runtime.RuntimeConstants; import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; import org.apache.velocity.tools.generic.ConversionTool; import org.apache.velocity.tools.generic.DateTool; import java.io.StringWriter; import java.util.ArrayList; import java.util.Date; public class VelocityTest { public static void main(String[] args) { VelocityEngine ve = new VelocityEngine(); //定义vm资源加载的路径为classpath所在目录 ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); ve.init(); //加载模板 Template t = ve.getTemplate("mail-template.vm", "utf-8"); VelocityContext ctx = new VelocityContext(); //加载velocity-tools ctx.put("date", new DateTool()); ctx.put("convert", new ConversionTool()); //放入要绑定的对象 ctx.put("model", getOrder()); StringWriter sw = new StringWriter(); t.merge(ctx, sw); //输出 System.out.println(sw.toString()); } private static Order getOrder() { Order o = new Order(); o.setDeliverDate(new Date()); o.setItems(new ArrayList<OrderItem>()); OrderItem item1 = new OrderItem(); item1.setProductName("iphone"); item1.setProductNum(1); OrderItem item2 = new OrderItem(); item2.setProductName("mac pro"); item2.setProductNum(2); o.getItems().add(item1); o.getItems().add(item2); return o; } }
运行的输出结果:
<string>用户 您好:</string> <h2>以下是 2015-09-12 的发货清单,请核对!</h2> <ul> <li>1 . iphone / 1 件</li> <li>2 . mac pro / 2 件</li> </ul>
参考文章:
http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/index.html