Freemarker Hashtableитерация по ключам - PullRequest
4 голосов
/ 05 января 2011

У меня есть несколько хеш-таблиц с целыми числами в качестве ключей, и я хочу иметь возможность перебирать их в моих шаблонах Freemarker, однако, похоже, ничего не работает.

Я попробовал пример из Freemarker, повторяющийся по ключам hashmap :


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

Вероятно, он работает со строками в качестве ключей, но не с целыми числами. Я также не могу получить значение из моей хеш-таблицы по конкретному значению. Что у меня есть:

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

(модель данных - это хэш-карта, переданная шаблону).

В шаблоне я делаю следующее:


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

Но ничего из этого не работает. Можете ли вы помочь мне, пожалуйста?

PS. Я преобразовал хеш-таблицу из в, чтобы передать ее шаблону, но это выглядит как обходной путь.

С наилучшими пожеланиями, Timofey

Ответы [ 2 ]

7 голосов
/ 06 января 2011

для тех из вас, кто может пойти по моим стопам. По-видимому, 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>

Удачи и да пребудет с тобой сила :)

2 голосов
/ 01 марта 2015

Это старая проблема, из-за которой тип хеша FTL не похож на Java Map, и он поддерживает только строковые ключи . Но, начиная с 2.3.22, вы можете использовать someMap?api.get(someNonStringKey), чтобы обойти это. Требуется некоторая настройка, чтобы включить, но ничего, что нарушает существующее приложение. См. этот ответ или эту запись FAQ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...