【问题标题】:How to access a Map using playframework template system (groovy)如何使用 playframework 模板系统(groovy)访问地图
【发布时间】:2011-07-19 15:57:16
【问题描述】:

我一直在使用--非常出色--playframework,但在查找有关如何使用 play 的模板引擎从视图访问 Map 数据结构的文档/示例时遇到了麻烦。

更具体地说,我希望在遍历对象列表时访问地图,例如,

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

感谢观看。

【问题讨论】:

    标签: groovy playframework


    【解决方案1】:

    这是一个通用解决方案,用于在使用 Play 时迭代 Map!框架:

    在控制器中:

    render(map);
    

    在模板中:

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

    您希望依靠 List 来迭代您的 Map 的事实表明您正在为您的迭代过程寻找一种可预测的方式。

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

    • HashMap 给你一个 unsortedunordered Map
    • LinkedHashMap 维护插入顺序
    • TreeMapsorted Map 的唯一 JDK 实现。默认情况下,它允许您按照元素的自然顺序进行迭代。您还可以指定自定义排序顺序并实现 Comparable 接口。这将导致您覆盖 compareTo() 方法。

    【讨论】:

      【解决方案2】:

      假设你在 Controller 中做:

      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}
      

      【讨论】:

        【解决方案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}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-03-10
            • 2012-03-20
            • 2011-01-09
            • 1970-01-01
            • 1970-01-01
            • 2015-09-21
            • 1970-01-01
            相关资源
            最近更新 更多