源文件:
package nc.jonathan.velocity;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
/**
*<p>
* 第四个实例
*</p>
*
*<p> 学习Velocity中的VTL - 模板语言: 条件、循环 </p>
*
* Create on 2006-4-3 13:20:12
*
* @author Jonathan Q. Bo
* @version 1.0 valocity study
*/
public class FourExample {
public FourExample(){
}
/**
* 测试方法
*/
public void test(){
try {
/* 初始化运行时引擎, 指定模版文件夹位置进行初始化 */
Properties p = new Properties();
p.setProperty("file.resource.loader.path", "vm");
Velocity.init(p);
/* 建立context, 并放入数据*/
VelocityContext context = new VelocityContext();
context.put("list",this.getList());
context.put("condition",new Boolean(this.getBoolean()));
/* 解析后数据的输出目标,java.io.Writer的子类 */
FileWriter w = new FileWriter("gen/FourExampleGen.java");
BufferedWriter bw = new BufferedWriter(w);
/* 进行解析 */
//Velocity.mergeTemplate("secondtemplate.vm",context,w);
Velocity.mergeTemplate("fourtemplate.vm","gb2312",context,bw);
bw.flush();
bw.close();
System.out.println("## ... successful!");
} catch (ResourceNotFoundException e1) {
System.out.println("## 源文件不存在!");
e1.printStackTrace();
} catch (ParseErrorException e2) {
System.out.println("## 解析文件错误!");
e2.printStackTrace();
} catch (MethodInvocationException e3) {
System.out.println("## 方法调用异常!");
e3.printStackTrace();
} catch (Exception e4){
System.out.println("## 其他错误!");
e4.printStackTrace();
}
}
/**
* 生成一个随机数组
* @return java.util.List
*/
private List getList(){
ArrayList al = new ArrayList();
for(int i = 0; i < 10; i++){
al.add(String.valueOf(Math.random()*100));
}
return al;
}
/**
* 生成随机布尔值
* @return boolean
*/
private boolean getBoolean(){
int tmp1 = (int)(Math.random()*100);
int tmp2 = (int)(Math.random()*100);
return (tmp1-tmp2)>0?true:false;
}
public static void main(String[] args){
FourExample example = new FourExample();
example.test();
}
}
模板文件
Test loop foreach... end
#foreach( $name in $list )
Array[$velocityCount] : [$name]
#end
Test condition if... else... end
#if ($condition)
The condition is true!
#else
The condition is false!
#end
Test loop + condition
#foreach( $name2 in $list )
#if(($velocityCount+1)%2 == 1)
+ Array[$velocityCount] : [$name2]
#else
- Array[$velocityCount] : [$name2]
#end
#end
输出结果
Test loop foreach... end
Array[1] : [94.19815973077552]
Array[2] : [92.175355103828]
Array[3] : [28.983192371817836]
Array[4] : [17.067573246183066]
Array[5] : [69.93726110689275]
Array[6] : [18.66140016348623]
Array[7] : [66.10854437485507]
Array[8] : [47.47973968131647]
Array[9] : [79.88433146393561]
Array[10] : [0.7504344062761126]
Test condition if... else... end
The condition is true!
Test loop + condition
- Array[1] : [94.19815973077552]
+ Array[2] : [92.175355103828]
- Array[3] : [28.983192371817836]
+ Array[4] : [17.067573246183066]
- Array[5] : [69.93726110689275]
+ Array[6] : [18.66140016348623]
- Array[7] : [66.10854437485507]
+ Array[8] : [47.47973968131647]
- Array[9] : [79.88433146393561]
+ Array[10] : [0.7504344062761126]