下面是一个简单的实例:
java代码:
package com.ali.vm;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.util.Date;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
public class Velocitytest{
public static void main( String[] args )throws Exception{
/* first, get and initialize an engine */
VelocityEngine ve = new VelocityEngine();
ve.init();
/* next, get the Template */
Template t = ve.getTemplate( "test.vm","utf-8" );//注意test.vm要放置到项目根目录,而不是classpath根目录
/* create a context and& nbsp;add data */
VelocityContext ctx = new VelocityContext();
Product pro = new Product();
pro.setDate(new Date());
pro.setName("zhangsan");
pro.setPrice(BigDecimal.valueOf(343424.34));
ctx.put("title", "test velocity");
ctx.put("content", "test success");
ctx.put("product", pro);
StringWriter writer = new StringWriter();
t.merge( ctx, writer );
/* show the World */
System.out.println( writer.toString() );
}
}
test.vm代码:
#set($foot="foot.vm")
#include("head.vm",$foot) ##使用include指令,可以包含多个文件,但是其中不能有vtl指令
#parse("varible.vm") ##使用parse指令,可以包含1个文件,可以有vtl指令
<head>
<title>${title}ishere</title> ##使用正式引用方式,否则变量与后面的连在一起了。
</head>
<body>
$!begion ##使用静态引用,这样当begion没有赋值时,可以不显示
#set($email="yuyd@163.com")
/$email ##使用转义字符,输出原内容
#if($a!=1)true#else no#end
<div>person:$person</div>
<div>name:${product.name}</div> ##使用正式引用方式,把属性一起扩进去
<div>price:$product.price</div>
<div>date:$product.date</div>
<div>name2:$p2.name</div>
<div>price2:$p2.price</div>
<div>date2:$p2.date</div>
<div>address2:$p2.address</div>
#set( $p3 = $product)
#set( $p2.name = "wanglaojie") ##输出与p1不同,说明解析方式是顺序解析。
<div>name:$product.name</div>
#set($array = ["aa","bb","cc"]) ##数组赋值
#set($map = {"aa":"aa++","bb":"bb++"}) ##map赋值
#foreach($i in $array) ##循环
#set($value=false) ##由于为空时没有赋值,所以需要先将值设为false,这样如果为空,则可以检测出来
#set($value=$map.get($i))
#if($value) ##if指令
<div>$i:$value</div>
#else ##else
<div>$i:no value</div>
#end
#end
#set($literal1 ="$product.name") ##使用"",如果文本中有变量,则会被解析
$literal1
#set($literal2 ='$product.name') ##使用'',如果文本中有变量,则不会被解析
$literal2
#literal() ##使用literal() end,如果文本中有变量,不会被解析,适用于多行文本
$product.name
#end
#macro(table $color $list) ##定义宏 带两个参数
<table>
#foreach($i in $list)
<tr><td>$i</td></tr>
#end
</table>
#end
#table("red",["123","456"]) ##调用宏,并传入参数
</body>