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

时间:2017-11-20 15:16:18

标签: java freemarker

我有模板文件,我尝试制作"动态"通过使用'循环'命令生成表行。

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

这是模板:

<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);

运行&#39;流程&#39;它创建了表并放了一个

${40_10_Off}

但它没有从java地图中选择密钥......

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

2 个答案:

答案 0 :(得分:1)

使用${templateToken},您只需告诉FreeMarker打印templateToken的值即可。如果您将tokens放入具有某个名称的数据模型中,那么请说“takeens”:

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]}

答案 1 :(得分:-1)

首先需要知道要替换的值(例如:“40_10_Off”,或 {} 之间的任何内容),让我们将其命名为“ToBeReplacedToken”,然后使用以下命令替换它:

String.replace("ToBeReplacedToken",tokens.get("ToBeReplacedToken"));