在 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 的示例中,您可以使用键值定义来解析:
private Map menuMap = ['index':'Socket method', 'ajaxpoll':'Ajax poll',
'socketremote':'RemoteForm Websocket', 'scsocket':'NEW: Websocket Client/Server']
<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>
我有一个控制器正在将哈希图传递给视图。地图有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 的示例中,您可以使用键值定义来解析:
private Map menuMap = ['index':'Socket method', 'ajaxpoll':'Ajax poll',
'socketremote':'RemoteForm Websocket', 'scsocket':'NEW: Websocket Client/Server']
<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>