处理循环并从 java 地图中提取数据

Processing loop and extracting data from java map

我有一个模板文件,我试图通过使用 'loop' 命令生成 table 行来制作 "dynamic"。

我还传递了一个 HashMap 来将数据填充到 table,但我无法使其工作。

这是模板:

<html>
 <p>
    <#list ['10', '20'] as sampleRate>
      <table>         
      <#list ['40'] as inputRange>
        <#list ['Off'] as dcFrequency>
          <#assign templateToken = inputRange + "_" + sampleRate + "_" + dcFrequency>
          <tr valign=top>
            <td>${templateToken}</td>
          </tr>
        </#list>
      </#list>
      </table>
    </#list>
</p>
<p><i>${.now?date}</i></p>
</body>
</html>

这是 java 代码:

tokens.put("40_10_Off", "WORKS!");
template.process(tokens, writer);

当 运行 时 'process' 它创建 table 并放置一个

${40_10_Off}

但它没有从 java 映射中选择密钥...

如何从我在 JAVA 代码中传递的 Map 中提取我创建的变量的值?

您首先需要知道要替换的值(例如:“40_10_Off”,或介于 {} 之间的任何值),我们将其命名为 "ToBeReplacedToken",然后使用:

替换它
String.replace("ToBeReplacedToken",tokens.get("ToBeReplacedToken"));

使用 ${templateToken} 时,您只需告诉 FreeMarker 打印 templateToken 的值,它就会这样做。如果您将 tokens 放入具有某个名称的数据模型中,假设 "tookens":

tokens.put("40_10_Off", "WORKS!");
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("tokens", tokens);
template.process(dataModel, writer);

那你就可以在模板里写${tokens[templateToken]}了。如果您更喜欢使用 tokens 作为数据模型本身(如在您的原始示例中),那么您可以编写:

${.vars[templateToken]}