g:each标记中的Grails:GSP变量替换

g:each标记中的Grails:GSP变量替换,grails,gsp,Grails,Gsp,我在一个循环中有一个循环,希望将第一个var的值替换为第二个var。下面是代码片段 <g:each in="${tables}" status="i" var="table"> <div class="tabletitle"> ${table.name} </div> <table> <thead> <tr> <g:

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

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

${table.name}
${displayColumn}
....
....
第二个g中的${table.name}替换:每个标记都不起作用。有什么好办法吗?

试试这个:

    <g:each in="${evaluate(table.name+'DisplayColumns')}" status="k" var="displayColumn">

试试这个:

    <g:each in="${evaluate(table.name+'DisplayColumns')}" status="k" var="displayColumn">

有趣的是,正如凯利建议的那样,我从未在gsp中使用过evaluate。但我可以建议一种不太理想的方法吗


您可以使用
()

${table.name}
存储在变量中有趣的是,正如Kelly所建议的,我从未在gsp中使用过evaluate。但我可以建议一种不太理想的方法吗


您可以使用
()

${table.name}
存储在变量中。您知道可以将任何对象传递给GSP吗?即使是地图(我不知道为什么,您正在尝试模拟地图),也要像这样使用它:

<g:each in="${displayColumns[table.name]}">

你知道你可以把任何东西传给GSP吗?即使是地图(我不知道为什么,您正在尝试模拟地图),也要像这样使用它:

<g:each in="${displayColumns[table.name]}">

那没用。它正在对字符串“DevDisplayColumns”中的每个字母进行迭代,其中table.name生成了“Dev”,但预期将用实际数组列表替换${DevDisplayColumns}。如果可以这样做,那么执行
No不也是一样的吗?这是我之前犯的错误。这将创建一个字符串,然后迭代将覆盖字符串中的每个字母。这不起作用。它正在对字符串“DevDisplayColumns”中的每个字母进行迭代,其中table.name生成了“Dev”,但预期将用实际数组列表替换${DevDisplayColumns}。如果可以这样做,那么执行
No不也是一样的吗?这是我之前犯的错误。这将创建一个字符串,然后迭代将覆盖字符串中的每个字母。实际上,我尝试了这一点,并进行了测试-如果您这样做,它将再次创建一个字符串,然后连接tempName+“DisplayColumns”,从而使迭代覆盖一个字符串。然后每个人都有一个字符串字母,比如“Dev”等等。是的,我意识到我犯了一个可怕的错误。出于好奇,你为什么不在控制器中处理这个逻辑呢?您可以直接传递包含DisplayColumns的列表。由于您已经在使用
状态
,您可以执行一些类似于实际GalmWing的操作,我尝试了这一点,还进行了一次测试-如果您执行此操作,它会再次创建一个字符串,然后连接tempName+“DisplayColumns”,从而在字符串上进行迭代。然后每个人都有一个字符串字母,比如“Dev”等等。是的,我意识到我犯了一个可怕的错误。出于好奇,你为什么不在控制器中处理这个逻辑呢?您可以直接传递包含DisplayColumns的列表。由于您已经在使用
状态
,您可以执行类似于Kelly为我提供的上述解决方案的操作。问题是映射中的键名部分存储在变量中,因此evaluate()对我来说很容易工作。但我还没有尝试过你的解决方案;谢谢。凯利的上述解决方案对我有效。问题是映射中的键名部分存储在变量中,因此evaluate()对我来说很容易工作。但我还没有尝试过你的解决方案;谢谢