Velocity遍历Map方法


Java中Velocity遍历Map主要是以下2个步骤

1. Java中生成Map对象

map<String, Object> mapData = new HashMap<String, Object>();
mapData.put("id1", 1L);
mapData.put("id2", 2L);
context.put("mapData", mapData);

2. Velocity中遍历Map显示数据

#foreach($data in $mapData.entrySet())
  key:${data.key}   value:${data.value}
#end

例子

//User.java
public class 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
Map:  
#foreach($member in$membersMap.entrySet())  
    <li>$member.key - $member.value.id$member.value.name</li>  
#end
//程序代码Main.java
Map<String, User> map=newHashMap<String,User>();  
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();  
// 添加数据到上下文中  
//使用$velocityCount可以对遍历进行计数  
context.put("membersMap", map);  
StringWriter writer = newStringWriter();  
template.merge(context, writer);  
writer.close();  
System.out.println(writer);

运行结果:

Map:
<li>1 - 1a</li>
<li>2 - 2b</li>
<li>3 - 3c</li>

Velocity生成模板的时候,经常需要遍历map对象输出对象的属性值。当你需要遍历的时候记录遍历的步长的时候,可以使用$velocityCount内置变量进行输出。