欢迎来到 Grails 世界。希望你有一个很棒的经历。不确定您是否知道,但通过生成视图,即自动生成的默认脚手架 CRUD 元素,最具体地说,list.gsp 具有大部分逻辑。尽管如此,我再次审查了您的问题,并且可以看到您卡在地图上,该地图上有一个非常简单的清单。就这样吧:
<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>
我输入 cmets myList3?.name 只是因为如果列表实际上是域对象的绑定,那么您可以显示正在返回的域类中的元素。
所以:
class Country {
String name
static hasMany=[cities:Cities]
}
Class Cities {
String name
static belongsTo=[Country:country]
}
如果 A 是 ${country} 并且 list3 是城市,那么 .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>