との両方DefaultObjectWrapper
で動作するので、いくつかの悪いキーが含まれているBeansWrapper
と思います。somelist
これが私が使用したテストコードです。test.ftl
次のクラスと同じディレクトリにテンプレートを配置します。
package adhoc;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
import freemarker.template.TemplateException;
public class TestTemplateRunner {
public static void main(String[] args) throws FileNotFoundException, IOException, TemplateException {
Configuration cfg = createConfiguration(false);
cfg.getTemplate("test.ftl").process(
createDataModel(),
new OutputStreamWriter(System.out));
}
private static Configuration createConfiguration(boolean useBeansWrapper) {
Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(TestTemplateRunner.class, "");
if (useBeansWrapper) {
BeansWrapper bw = new BeansWrapper();
bw.setSimpleMapWrapper(true);
cfg.setObjectWrapper(bw);
}
return cfg;
}
private static Map<String, Object> createDataModel() {
Map<String, Object> dataModel = new HashMap<String, Object>();
Map<String, Map<String, Long>> domains = new HashMap<String, Map<String, Long>>();
dataModel.put("domains", domains);
Map<String, Long> domain1Hits = new HashMap<String, Long>();
domain1Hits.put("/index", 1234L);
domain1Hits.put("/about", 123L);
domains.put("site1.com", domain1Hits);
Map<String, Long> domain2Hits = new HashMap<String, Long>();
domain2Hits.put("/", 2234L);
domain2Hits.put("/contact", 223L);
domains.put("site2.com", domain2Hits);
List<String> somelist = new ArrayList<String>();
somelist.add("site1.com");
somelist.add("site2.com");
dataModel.put("somelist", somelist);
return dataModel;
}
}