如何使用play框架模板系统访问Map(groovy)

时间:2011-07-19 15:57:17

标签: groovy playframework

我一直在使用 - 非常优秀 - playframework,并且很难找到有关如何使用play的模板引擎从视图访问Map数据结构的文档/示例。

更具体地说,我希望在迭代对象列表时访问Map,例如,

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

感谢您的光临。

4 个答案:

答案 0 :(得分:21)

这是一个通用解决方案,可以在Play中使用 Map 进行迭代!框架:

在控制器中:

render(map);

在模板中:

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

你希望依靠一个 List 来迭代你的 Map 这一事实表明你正在为你的迭代过程搜索一种可预测的方式。

在这种情况下,请记住,如果您不使用有序/排序的 Map 实现,迭代将是不可预测的。

  • HashMap 为您提供未排序无序 地图
  • LinkedHashMap 维护广告订单
  • TreeMap 已排序 Map 的唯一JDK实现。默认情况下,它允许您按照元素的自然顺序进行迭代。您还可以指定自定义排序顺序并实现 Comparable 界面。这将导致您覆盖 compareTo()方法。

答案 1 :(得分:5)

假设您在控制器中执行:

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 :(得分:0)

我对游戏框架一无所知,但这可以在GSP中使用

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

答案 3 :(得分:0)

我正在地图上做这样的事情:

*{ 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}