在发送郵件时使用在业务层访问
package com.unutrip.template.util;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.VelocityException;
/**
* Velocity 模板 使用的工具类
*
* @author longgangbai
*
*/
public class VelocityUtils {
private static final Logger logger = Logger.getLogger(VelocityUtils.class);
private static VelocityEngine velocityEngine = new VelocityEngine();
static {
Properties p = new Properties();
p.setProperty("file.resource.loader.path", VelocityUtils.class
.getResource("/velocity/").getFile());
System.out.println("path"
+ VelocityUtils.class.getResource("/velocity/").getFile());
try {
velocityEngine.init(p);
/*
* velocityEngine.setProperty("input.encoding", "UTF-8");
* velocityEngine.setProperty("out.stream", "UTF-8");
* velocityEngine.setProperty("resource.loader", "class");
* velocityEngine .setProperty("class.resource.loader.class",
* "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
*/
} catch (Exception e) {
logger.error("loader velocity is error!");
e.printStackTrace();
}
}
public VelocityUtils() {
}
/**
*
* @param templateLocation
* @param model
* @param writer
* @throws VelocityException
*/
public static void mergeTemplate(String templateLocation, Map model,
Writer writer) throws VelocityException {
try {
VelocityContext velocityContext = new VelocityContext(model);
velocityEngine.mergeTemplate(templateLocation, velocityContext,
writer);
} catch (Exception ex) {
logger
.error(
"Why does VelocityEngine throw a generic checked exception, after all?",
ex);
throw new VelocityException(ex.toString());
}
}
/**
*
* @param velocityEngine
* 模板引擎
* @param templateLocation
* 模板的名稱
* @param encoding
* 設置的編碼格式
* @param model
* 模板對應的模型的對象
* @param writer
* 輸出對象
* @throws VelocityException
* 拋出异常的信息
*/
private static void mergeTemplate(VelocityEngine velocityEngine,
String templateLocation, String encoding, Map model, Writer writer)
throws VelocityException {
try {
VelocityContext velocityContext = new VelocityContext(model);
velocityEngine.mergeTemplate(templateLocation, encoding,
velocityContext, writer);
} catch (Exception ex) {
logger
.error(
"Why does VelocityEngine throw a generic checked exception, after all?",
ex);
throw new VelocityException(ex.toString());
}
}
/**
* 常用的提供模板內容的字符串信息(常用的方法的)
*
* @param templateLocation
* @param model
* @return
* @throws VelocityException
*/
public static String mergeTemplateIntoString(String templateLocation,
Map model) throws VelocityException {
StringWriter result = new StringWriter();
mergeTemplate(velocityEngine, templateLocation, "UTF-8", model, result);
return result.toString();
}
/**
*
* @param velocityEngine
* @param templateLocation
* @param encoding
* @param model
* @return
* @throws VelocityException
*/
public static String mergeTemplateIntoString(VelocityEngine velocityEngine,
String templateLocation, String encoding, Map model)
throws VelocityException {
StringWriter result = new StringWriter();
mergeTemplate(velocityEngine, templateLocation, encoding, model, result);
return result.toString();
}
}
测试代码:
package com.unutrip.template.model;
import java.util.Date;
/**
* 测试的一个定点的對象
*
* @author longgangbai
*
*/
public class Order {
// 客户
public String customerName;
// 订单编号
public String orderNo;
// 酒店的名稱
public String hotelName;
// 房型编号
public String roomName;
// 入住時間
public Date checkindate;
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getHotelName() {
return hotelName;
}
public void setHotelName(String hotelName) {
this.hotelName = hotelName;
}
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public Date getCheckindate() {
return checkindate;
}
public void setCheckindate(Date checkindate) {
this.checkindate = checkindate;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
}
测试类:
package com.unutrip.template.test;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.time.DateUtils;
import com.unutrip.template.model.Order;
import com.unutrip.template.util.VelocityUtils;
public class VelocityTest {
public static void main(String[] args) throws Exception {
String veloctiytmp = "email.vm";
Map model = new HashMap();
// 一般的對象
Order order = new Order();
order.setCustomerName("wuxc");
order.setHotelName("汉庭酒家");
order.setOrderNo("00009");
order.setRoomName("4567");
order.setCheckindate(new Date());
model.put("order", order);
// 集合對象
List<Order> orders = new ArrayList<Order>();
for (int i = 1; i < 6; i++) {
Order order0 = new Order();
order0.setCheckindate(DateUtils.add(new Date(),
Calendar.DAY_OF_MONTH, i));
order0.setCustomerName("customerName--" + i);
order0.setHotelName("如家大酒店");
order0.setOrderNo("001");
order0.setRoomName("200" + i);
orders.add(order0);
}
model.put("members", orders);
// 存放Map
Map membersMap = new HashMap();
membersMap.put("key", order);
model.put("membersMap", membersMap);
System.out.println("From Veclotity ="
+ VelocityUtils.mergeTemplateIntoString(veloctiytmp, model));
}
}
veclocity的模板文件如下:
编译一个集合和一个Map對象應用
<html>
<body>
List:
#foreach($member in $members)
<li>$member.customerName - $member.orderNo $member.hotelName $member.checkindate??string('yyyy-MM-dd ') </li>
#end
<br>
Map:
#foreach($member in $membersMap.entrySet())
<li>$member.key - $member.value.customerName $member.value.hotelName $member.value.roomName</li>
#end
</body>
</html>
Velocity的一个问题:关于時間数字类型必须使用Java代码格式化显示.