我尝试使用Freemarker处理Map<com.taskadapter.redmineapi.bean.Version, Map<com.taskadapter.redmineapi.bean.User, List<com.taskadapter.redmineapi.bean.Issue>>>
。
我在使用非Map
密钥String
时阅读了有关问题的文档:http://freemarker.org/docs/app_faq.html#faq_nonstring_keys
这是我的一段代码
Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
configuration.setClassForTemplateLoading(Main.class.getClass(), "/");
configuration.setAPIBuiltinEnabled(true);
Template template = configuration.getTemplate("myTemplate.ftl");
Map<String, Object> templateData = new HashMap<>();
templateData.put("myMap", myMap);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
template.process(templateData, outputStreamWriter);
和我的模板
<#list myMap?keys as key>
<h2>${key}</h2>
<#list myMap?api.get(key)?keys as key2>
${key2}
</#list>
</#list>
但我有以下错误
Exception in thread "main" FreeMarker template error:
The following has evaluated to null or missing:
==> myMap?api.get [in template "template.ftl" at line 196, column 40]
有什么想法吗?
更新:地图的类型为
Map<com.taskadapter.redmineapi.bean.Version, Map<com.taskadapter.redmineapi.bean.User, List<com.taskadapter.redmineapi.bean.Issue>>>
使用方法com.google.common.collect.Table<Version, User, List<Issue>>
rowMap()
创建地图
可能的解决方案:如果我使用<#list myMap?values[key_index]?keys as key2>
则可行。