velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools

简介: 通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用velocity模板引擎生成 『每日发货单』邮件内容: 一、先定义邮件内容模板:mail-template.

通常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

 

目录
相关文章
|
10天前
|
消息中间件 前端开发 Java
java学习路径
【4月更文挑战第9天】java学习路径
17 1
|
30天前
|
安全 Java 程序员
学习Java类加载机制
在Java的世界里,每一个类或者接口,在经历编译器后,都会生成一个个.class文件。
18 0
|
10天前
|
设计模式 前端开发 安全
Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
【4月更文挑战第9天】Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
15 1
|
1月前
|
Java 索引
Java中String方法学习总结_kaic
Java中String方法学习总结_kaic
|
6天前
|
Java 存储
键值之道:深入学习Java中强大的HashMap(二)
键值之道:深入学习Java中强大的HashMap
10 0
键值之道:深入学习Java中强大的HashMap(二)
|
9天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
27天前
|
前端开发 Java 数据库连接
五年Java学习心路历程
五年Java学习心路历程
33 0
|
1月前
|
Java 程序员 数据安全/隐私保护
Java中的异常语法知识居然这么好玩!后悔没有早点学习
Java中的异常语法知识居然这么好玩!后悔没有早点学习
32 1
|
1月前
|
分布式计算 Oracle Java
第一篇CSDN博客——Java入门指南:学习Java编程的第一步
第一篇CSDN博客——Java入门指南:学习Java编程的第一步
|
1月前
|
存储 算法 Java
【数据结构与算法】1、学习动态数组数据结构(基本模拟实现 Java 的 ArrayList 实现增删改查)
【数据结构与算法】1、学习动态数组数据结构(基本模拟实现 Java 的 ArrayList 实现增删改查)
44 0