Freemarker Hashtable <integer,string =“”>,按键迭代</integer,>

时间:2011-01-05 19:07:06

标签: hashtable freemarker

我有许多以整数作为键的哈希表,我希望能够在我的Freemarker模板中迭代它们,但是,似乎没有任何效果。

我尝试了Freemarker iterating over hashmap keys中的示例:


<#list user.props() as prop>
   ${prop} = ${user.get(prop)}
</#list>

它可能适用于Strings作为键,但它不适用于Integers。我甚至无法通过具体值从哈希表中检索值。我拥有的是:

Hashtalbe ht = new Hashtable();
ht.put(1, "hello");
datamodel.put("devices", ht);

(datamodel是传递给模板的hashmap)。

在模板中,我执行以下操作:


<#if devices??>
 <#list devices?keys as prop>
  <p>${prop}</p>
  <p>${devices.get(1)}</p>

OR
<p>${devices.get(key)}</p>
OR
<p>${devices[key]}</p>
OR
<p>${devices[1]}</p> </#list> <#else> <p> no devices</p> </#if>

但这些都不起作用。你能帮帮我吗?

PS。我将哈希表转换为将其传递给模板,但这似乎是一种解决方法。

祝你好运, 提莫菲

2 个答案:

答案 0 :(得分:7)

对于那些跟随我的脚步的人。 显然,FreeMarker无法使用带有参数的Hashtables。所以我最终创建了这些哈希表inti的版本,因为我的哈希表中有数字作为键,我能够在我的模板中执行以下操作:


<#list 1..100 as prop>
    <#if hashtable[prop?string]??>
        <option value='${prop}'<#if prop==selected> selected='selected'</#if>>${hashtable[prop?string]}</option>
    <#else><#break>
    </#if>
</#list>

祝你好运,力量可能与你同在:)

答案 1 :(得分:2)

这是旧问题,FTL的哈希类型不像Java的Map,而是only supports string keys。但是,从2.3.22开始,你可以使用someMap?api.get(someNonStringKey)来解决这个问题。它需要一些配置才能启用,但不会破坏现有应用程序。请参阅this answerthis FAQ entry