Как получить доступ к карте с использованием системы шаблонов игровых рисунков (groovy)

Я использовал превосходную playframework и имел проблемы с поиском документации/примеров о том, как получить доступ к структуре данных карты из представления, используя механизм шаблонов игр.

Чтобы быть более конкретным, я хочу получить доступ к Карте, поскольку я перебираю список объектов, например,

#{list items:itemList, as:'item'}
 // access the map value using the ${item?.id} as the key
#{/list}

Спасибо, что посмотрели.

Ответ 1

Предполагая, что вы выполняете в контроллере:

render(map, itemList); //map is a Map

Эта должна работать:

#{list items:itemList, as:'item'}
 // access the map value using the ${item?.id} as the key
 ${map.get(item.?id)}
#{/list}

Ответ 2

Это общее решение для итерации на карте при использовании Play! Framework:

в контроллере:

render(map);

в шаблоне:

#{list items:map.keySet(), as:'key'}
   ${map.get(key)}
#{/list}

Тот факт, что вы хотите полагаться на сторону Список для итерации на Map, подсказывает мне, что вы ищете предсказуемый путь для своего итерационного процесса.

В этом случае просто помните, что итерация будет непредсказуемой, если вы не используете упорядоченную/отсортированную реализацию карты.

  • HashMap предоставляет несортированную, неупорядоченную карту
  • LinkedHashMap поддерживает порядок вставки
  • TreeMap является единственной реализацией JDK отсортированной Карты. По умолчанию он позволяет выполнять итерацию по натуральному порядку элементов. Вы также можете указать пользовательский порядок сортировки и реализует интерфейс Comparable. Это приведет к переопределению метода compareTo().

Ответ 3

Я ничего не знаю о платформе воспроизведения, но это будет работать в GSP

#{list items:itemList, as:'item'}
 ${map[item?.id]}
#{/list}

Ответ 4

Я делаю такие вещи на карте:

*{ Map<User, Integer> shareHolders = ... }*
#{list shareHolders.sort{it.value}.collect {k,v -> k}.reverse(), as:'holder'}
    <tr>
        <td>${holder.name}</td>
        <td>${shareHolders[holder]}</td>
    </tr>
#{/list}