Grails g:link传递参数

20

我有类似这样的东西:

<g:each in="${temp}">

  <li>Date: ${it.dateParticipated}, <br>Role: ${it.role}, <br>Acceptence: ${it.accepted}, <br>
  <g:link controller="conference" action="participated" id="${it.conference.id}">
     Conference: </g:link>${it.conference},<br>
Role: ${it.role}, <br>Status: ${it.status}</li><br>

  <br>
</g:each>
我想要做的是,当我点击“Conference”时,加载控制器“conference”和方法“participated”,并传递参数“it.conference”。如何在g:link标签中传递这些参数?
需要这样做的原因是,当我点击“conference”时,会加载另一个页面,并传递详细信息的ID。
3个回答

33
使用 params 属性传递参数映射:
<g:link action="/conference/participated" id="${it.conference.id}" params="[foo: 'bar', bar: 'foo']">My Link!</g:link>

查看 文档 获取更多示例。


我读了它。但我不明白如何通过它传递 'it.conference'。 - robert
会议是一个完整的对象还是一个原始对象? - Kaleb Brasee
2
从文档中并不是非常明显,但是你可以去掉引号来引用在之前操作中设置的变量。 - barrymac
8
谢谢你@barrymac,我从来没有想到过。它可以运行,但是它非常丑陋,甚至IDEA报告它为语法错误,所以如果有更好的建议,欢迎分享 ;) 未来读者的示例:params="[foo: "${it.bar}"]" - c089
8
可能这种方式会稍微好看一些... :) params="${[foo:it.bar]}" 的意思是使用 it.bar 的值作为 foo 的值,并将它们放入 params 变量中。 - Becca Gaspard
可能会更加美观,但它没有为我生成参数。 - Brent Fisher

6
你需要使用 ${ } 包裹整个参数,而不是分别包裹要传递的每个变量。
<g:each in="${temp}">

  <li>Date: ${it.dateParticipated}, <br>Role: ${it.role}, <br>Acceptence: ${it.accepted}, <br>
  <g:link controller="conference" action="participated" params="${[id: it.conference.id, role: it.role, status: it.status]}">
     Conference: </g:link>

  <br>
</g:each>

3
params="[customerId: customer.id]"

你好,兄弟。我使用了相同的注释,但是在控制器中得到了空值。https://stackoverflow.com/questions/49855362/not-able-to-pass-the-id-to-the-controller-from-gsp - AB21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接