Velocity生成模板的时候,经常需要使用到map、list对象,然后遍历输出对象的属性值。当你需要遍历的时候记录遍历的步长的时候,可以使用$velocityCount内置变量进行输出。下面demo开始我们的代码之旅吧。
首先我们定义一个javabean实体对象,user定义如下:
publicclass User { privateintid; private String name; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id = id; } public String getName(){ returnname; } publicvoidsetName(String name){ this.name = name; } publicvoidset(intid, String name){ this.id = id; this.name = name; } publicUser(intid, String name){ this.id = id; this.name = name; } }
定义的模板文件1.bpmn内容如下所示:
List: #foreach($member in $members) $velocityCount <li>$member.id -$member.name </li> #end <br> Map: #foreach($member in$membersMap.entrySet()) <li>$member.key - $member.value.id$member.value.name</li> #end array: #set($arr=[0..23]) #foreach($foo in [0..23]) $foo #end
程序代码如下所示:
List<User> list = newArrayList<User>(); Map<String, User> map=newHashMap<String,User>(); list.add(newUser(1, "a")); list.add(newUser(2, "b")); list.add(newUser(3, "c")); map.put("1", newUser(1, "a")); map.put("2", newUser(2, "b")); map.put("3", newUser(3, "c")); Properties p = newProperties(); p.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); Velocity.init(p); // 初始化vm模板 Template template =Velocity.getTemplate("1.bpmn", "UTF-8"); // 初始化上下文 VelocityContext context = newVelocityContext(); // 添加数据到上下文中 context.put("title", "cccc"); context.put("name", "a,b,c"); context.put("members", list); //使用$velocityCount可以对遍历进行计数 context.put("membersMap", map); StringWriter writer = newStringWriter(); template.merge(context, writer); writer.close(); System.out.println(writer);
输出程序结果部分如下所示:
List:
1 <li>1 - a</li>
2 <li>2 - b</li>
3 <li>3 - c</li>
<br>
Map:
<li>1 - 1a</li>
<li>2 - 2b</li>
<li>3 - 3c</li>
array:
0
1
2
Ok非常完美搞定。