У меня странная проблема с картой Freemarker.Мой пример предназначен для отображения списка автомобилей с именами соответствующих владельцев:
Car(id,name,ownerId)
User(id,name)
Обратите внимание, что ownerId
является единственныммост, к которому я могу получить доступ owner
из car
.По некоторым причинам мы не создаем отношения гибернации для этих доменов.
Я добавил в модель список carList
из Car(id,name,ownerId)
и Map<String, String> map
, который содержит (userId, name)
из все пользователей .. Это потому, что Freemarker принимает карту только с ключом типа String.
Зацикливаясь в carList, я пытаюсь получить имя владельца через карту.
<#list carList as car>
${map?values[car.ownerId]} - ${car.ownerId}<br/>
</#list>
Ностранно то, что полученный результат:
Tom - 1
Jerry - 2
Jerry - 2
David - 4
- 5
- 5
Имя пользователя "5" отсутствует, но оно существует в базе данных.Кроме того, когда я перебираю карту, результат будет правильным:
<#list map?keys as key>
${key} - ${map[key]}
</#list>
Результаты:
1 - Tom
2 - Jerry
3 - Mickey
4 - David
5 - Mike
Отсутствующее имя встречается только для конкретного пользователя.Кто-нибудь знает, чего здесь не хватает?