我在循环中有一个循环,想将第一个变量的值替换为第二个变量。下面是代码片段。
<g:each in="${tables}" status="i" var="table">
<div class="tabletitle">
${table.name}
</div>
<table>
<thead>
<tr>
<g:each in="${${table.name}DisplayColumns}" status="k" var="displayColumn">
<td>${displayColumn}</td>
</g:each>
</tr>
</thead>
<tbody>
....
....
</tbody>
</table>
</g:each>
第二个 g:每个标记中的 ${table.name} 替换不起作用。有什么想法让它工作吗?
试试这个:
<g:each in="${evaluate(table.name+'DisplayColumns')}" status="k" var="displayColumn">
有趣的是,我从来没有像凯利建议的那样在 gsp 中使用过评估。但是我可以建议一个不太理想的方法吗?
您可以使用 <g:set>
( http://grails.org/doc/2.0.x/ref/Tags/set.html ) 将${table.name}
存储在变量中
你知道你可以把任何对象传递给GSP吗?甚至地图(你试图模拟地图,我不知道为什么),并像这样使用它:
<g:each in="${displayColumns[table.name]}">
其中 displayColumns 是一个映射,其中包含每个表的列。
顺便说一句,更干净的方法是使用包含此数据的特殊对象。像TableDetails
这样有List<String> getColumns()
方法的东西。所以你可以使用
<g:each in="${tables}" var="table">
${table.name}
<g:each in="${table.columns}" var="column">
${column}
</g:each>
</g:each>