free stringmark with non string keys

时间:2015-06-17 22:52:27

标签: java freemarker

我尝试使用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>则可行。

0 个答案:

没有答案