如何使用地图参数调用它们?

时间:2013-04-16 16:51:50

标签: map parameters macros freemarker

我一直在闲逛,但无法找到任何文档或示例代码。

简介:

我有一个具有此键/值映射的ftl页面:

  • roomType.description [" ES"] =" texto"
  • roomType.description [" EN"] ="一些文字"
  • roomType.description [" PT"] =" texto"

问题:

如何将地图作为参数传递给freemarker宏?

示例代码:

宏声明

<#macro descriptionMacro firstLang descriptionText>
    <#-- SOME CODE -->
    <textarea>
        <#if descriptionText[firstLang]??>
            ${descriptionText[firstLang]?trim}
        </#if>
    </textarea>
    <#-- SOME OTHER CODE -->
</#macro>

宏调用(不工作)

<@descriptionMacro firstLang="es" descriptionText=roomType.description/>

1 个答案:

答案 0 :(得分:3)

我在代码中看到的唯一问题是地图中的键是大写的(“EN”,“ES”,“PT”),并且您尝试使用小写来访问模板中的值关键“es”。

除此之外,我认为使用Map作为参数没有任何限制。

例如给出这张地图:

  Map<String, String> description = new HashMap<>();
  description.put("en", "Some text");
  description.put("es", "Testo");
  description.put("fr", "Texte");

  Map<String, Object> data = newHashMap();
  data.put("description", description);

  Template template = getTemplate();
  Writer out = new StringWriter();
  template.process(data, out);

这个模板:

<#macro printDescription lang data>
    Description = ${data[lang]}
</#macro>
<@printDescription lang="es" data=description />

输出结果为:

Description = Testo