当需要用列表来遍历集合的内容时,list指令是非常好用的.
list指令语法:
<#list sequence as loopVariable>repeatThis</#list>
sequence 是从hash表中放入的集合的键值
loopVariable 循环变量也就是迭代的当前项,这个变量仅仅只是存在于list开闭标签之间.
项目结构:
Test.java
package org.freemarker.test;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class Test {
public static void main(String[] args) throws IOException,
TemplateException {
Configuration cfg = new Configuration();
// 指定模板文件从何处加载的数据源,这里设置成一个文件目录。
cfg.setDirectoryForTemplateLoading(new File("./template"));
// 指定模板如何检索数据模型,这是一个高级的主题了…
// 但先可以这么来用:
cfg.setObjectWrapper(new DefaultObjectWrapper());
// 创建根哈希表
Map<String,Object> root = new HashMap<String,Object>();
// 在根中放入用户名称数组
root.put("names", new String[]{"admin","zhangsan","lisi"});
//在hash表中放入对象
User user1=new User("A", "A001");
user1.addFriend(new User("A-A", "A-A001"));
user1.addFriend(new User("A-B", "A-B002"));
user1.addFriend(new User("A-C", "A-C003"));
User user2=new User("B", "B001");
user2.addFriend(new User("B-A", "B-A001"));
user2.addFriend(new User("B-B", "B-B002"));
user2.addFriend(new User("B-C", "B-C003"));
//将用户信息放入集合中
List<User> users=new ArrayList<User>();
users.add(user1);
users.add(user2);
//放入hash表中
root.put("users", users);
// 从配置Configuration对象中获取模版
Template temp = cfg.getTemplate("list.ftl");
Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();
out.close();
}
}
package org.freemarker.test;
import java.util.ArrayList;
import java.util.List;
/**
* @author YHC 用户实体类
*/
public class User {
private String userId;//用户id
private String username;//用户名称
private List<User> friends = new ArrayList<User>();//用户好友
public User() {
}
public List<User> getFriends() {
return friends;
}
public User(String username, String userId) {
this.username = username;
this.userId = userId;
}
public String getUserId() {
return userId;
}
public String getUsername() {
return username;
}
public void setUserId(String userId) {
this.userId = userId;
}
public void setUsername(String username) {
this.username = username;
}
/**
* 添加好友
* @param friend 用户对象
*/
public void addFriend(User friend){
friends.add(friend);
}
}
list.ftl
<#--
遍历普通字符串数组
-->
<#list names as name>
${name}
</#list>
<#--
遍历集合对象
-->
<#list users as user>
---------${user.userId}${user.username}
<#--遍历对象的自对象集合
注意:此子对象必须要有getter方法-->
<#list user.friends as friend>
-----------------------${friend.userId}${friend.username}
</#list>
</#list>
admin
zhangsan
lisi
---------A001A
-----------------------A-A001A-A
-----------------------A-B002A-B
-----------------------A-C003A-C
---------B001B
-----------------------B-A001B-A
-----------------------B-B002B-B
-----------------------B-C003B-C