在 grails 中将列表映射渲染为 table

Render a Map of lists as a table in grails

我有一个控制器正在将哈希图传递给视图。地图有3个元素,其中之一如下:

-- 列表的列表(A) 其中list3是列表的列表

现在我想在gsp上显示如下:

-----------------------------------------------------------------------------
A.list1     |       A.list2     |       A.list3[0]      |       A.list4     |
            |                   |       A.list3[1]      |                   |
            |                   |       A.list3[2]      |                   |
----------------------------------------------------------------------------

我对生成视图知之甚少,我只需要这里的表格格式。没有什么比这更花哨的了。我只想要 table 因为数据只有在那种格式下才有意义。谢谢。

欢迎来到 Grails 世界。希望你有一个很棒的经历。不确定您是否知道,但通过生成视图,即自动生成的默认脚手架 CRUD 元素,最具体地说,list.gsp 具有大部分逻辑。 None 我越少重新审视了您的问题,并且可以看到您卡在地图上,地图上有一个列表,实际上只是一些东西。就这样吧。:

<g:each in="${A}" var="myMap">
<tr>
 <td>${myMap.list1}</td>
 <td>${myMap.list2}</td>
 <td>
  <g:each in="${myMap.list3}"  status="i" var="myList3">
   ${myList3} <!-- this should be what you want I have added below -->
   <!-- ${myList3?.name} --> <!-- explained further below -->
   <!-- ${i} : ${myList3} --> <!--where i is this is the iterator -->
  </g:each>
  </td>
 <td>${myMap.list4}</td>
 </tr>
 </g:each>

我添加评论 myList3?.name 只是因为如果列表实际上是域对象的绑定,那么您可以显示正在返回的域类中的元素。

所以:

class Country {
  String name
  static hasMany=[cities:Cities]
}

Class Cities {
  String name
  static belongsTo=[Country:country]
}

然后如果 A 是 ${country} 并且 list3 是城市那么 .name 实际上会显示 cities.name 这是绑定值...

在其他未绑定 domainClass 的原始映射返回到 gsp 的示例中,您可以使用键值定义来解析:

raw map being passed to gsp

private Map menuMap = ['index':'Socket method', 'ajaxpoll':'Ajax poll',
        'socketremote':'RemoteForm Websocket', 'scsocket':'NEW: Websocket Client/Server']

navbar gsp

<g:each in="${menuMap }" var="cmenu">
            <li <g:if test="${actionName == cmenu.key}">class="active"</g:if>>
                <g:link action="${cmenu.key}">
                    ${cmenu.value}
                </g:link>
            </li>
        </g:each>