文章出處
文章列表
通常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
文章列表
全站熱搜