Grails:g:每个标签中的GSP变量替换



我在循环中有一个循环,想将第一个变量的值替换为第二个变量。下面是代码片段。

<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>

最新更新