如何使用带有 hashmap 变量的 freemarker 列表

Posted

技术标签:

【中文标题】如何使用带有 hashmap 变量的 freemarker 列表【英文标题】:How to use freemarker list with hashmap variable 【发布时间】:2016-04-26 15:30:15 【问题描述】:

在 Java 中我使用的是

HashMap<String, String>

然后在我的 freemarker 模板中可用。

我可以这样访问它

Time:$candidFieldsList["STD-TIME_Environmental_1"]

这将从我的地图中提取键 STD-TIME_Environmental_1 的值,这工作正常。现在我需要将它与一个列表结合起来以减少冗余代码。

我的模板中有一个区域需要重复 4 次

Time:$candidFieldsList["STD-TIME_Environmental_1"]

与其他部分的区别只是数字,所以我尝试使用列表来解决这个问题。但它没有工作

<#list 1..4 as x>
Time:$candidFieldsList["STD-TIME_Environmental_"$x]
</#list>

它不返回键的值,而是返回解析器异常或此表达式的字符串。

freemarker.core.ParseException: Encountered "$" at line 4, column 50 in template.ftl.

期待以下之一: “]”…… “。” ... “[”... “(”…… “?” ... “!” ...

【问题讨论】:

【参考方案1】:

尝试使用+ 运算符连接字符串:

<#list 1..4 as x>
    Time:$candidFieldsList["STD-TIME_Environmental_" + x]
</#list>

【讨论】:

顺便说一句,"STD-TIME_Environmental_$x" 也可以工作,只有 $x 必须在字符串(不再是)文字内,这与 OP 的尝试不同。

以上是关于如何使用带有 hashmap 变量的 freemarker 列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSP 页面中从 Java 类中设置 hashmap 的值以便在控制器中进一步使用

如何使用 HashMap 并在 ArrayAdapter 中使用它来显示微调器中的值

使用带有 hashmap 的 mybatis 结果的不需要的 Json 结果

如何避免重复代码初始化 hashmap 的 hashmap?

将带有List的scala hashmap转换为带有java list的java hashmap

带有 HashMap 的准备好的语句,异常