【问题标题】:Accessing Freemarker root objects with loop使用循环访问 Freemarker 根对象
【发布时间】:2018-11-20 22:50:41
【问题描述】:

使用 Freemarker 和 Java。我的根地图中有如下条目:

DAY_1=2018/05/01
VOLUME_1=123456
VALUE_1=456.78
DAY_2=2018/05/02
VOLUME_2=654321
VALUE_2=876.54
...
DAY_N=2018/05/20
VOLUME_N=555555
VALUE_N=333.44

并希望在逗号分隔的列表中输出这些内容,如下所示:

2018/05/01,123456,456.78
2018/05/02,654321,876.54
...
2018/05/20,555555,333.44

我认为这很容易在我的 FTL 模板文件中使用一个简单的循环迭代器进行迭代,该迭代器指定键“DAY_”的静态部分并连接循环索引中的索引值。

我已经搜索了几个小时来寻找如何做到这一点的策略,并尝试了许多 FTL 编码样式,但除了错误什么也没有得到。可能我也想多了。

对访问此地图数据的简单方法有何建议?

谢谢, 肯

【问题讨论】:

    标签: java freemarker


    【解决方案1】:

    假设 N 至少为 1(否则使用独占结束范围,如 1 ..< N+1):

    <#list 1..N as i>
      ${.data_model['DAY_${i?c}']},${.data_model['VOLUME_${i?c}']},${.data_model['VALUE_${i?c}']}
    </#list>
    

    或者,有些人更喜欢使用.vars,它还会检查当前命名空间中的变量以及本地和循环变量。

    但我建议使用包含 ListMap-s 或 List 的 Java bean 的数据模型。就 FreeMarker 而言,这就是它的意义所在。

    【讨论】:

    • 谢谢!这对解决我的问题大有帮助。我需要弄清楚的最后一件事是如何计算“DAY_xx”条目以提供 N 值。如果我指定的值大于我的数据集,我会得到一个 Freemarker “以下已评估为空或缺失:”是否有任何漂亮的功能可以根据字符串模式计算 data_model 的键集中的条目?
    • 提取最高 N 没有什么特殊功能。正如我所说,您的数据模型相当不寻常。但是,假设索引范围没有间隙,您可以这样做:&lt;#list 1..99999999 as i&gt;&lt;#if !(.data_model['DAY_${i?c}']??)&gt;&lt;#break&gt;&lt;/#if&gt;...&lt;/#list&gt;
    • 我对数据模型也不是特别兴奋,并且可以看到设计与更好的设计实践背道而驰。我最终添加了一个计数键/值对并在 1..N 循环范围内使用 thay 值。
    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多