grails g: параметры pass pass

18

У меня есть что-то вроде этого:

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

Что я хочу сделать, когда я нажимаю «Конференция», загружается «конференция» контроллера с принятым методом, и передается параметр «it.conference». Как передать эти параметры в теге g: link?

Мне нужно это, потому что, когда я нажимаю слово «конференция», другая страница загружается с информацией о конференции с переданным идентификатором.

    
задан robert 22.05.2011 в 01:12
источник

3 ответа

30

Используйте атрибут params для передачи в карте параметров:

<g:link action="/conference/participated" id="${it.conference.id}" params="[foo: 'bar', bar: 'foo']">My Link!</g:link>

Подробнее см. документацию .

    
ответ дан Kaleb Brasee 22.05.2011 в 01:15
  • я прочитал. но я не понимаю, как я могу передать «it.conference» через него. –  robert 22.05.2011 в 01:17
  • Является ли конференция полноправным объектом или примитивом? –  Kaleb Brasee 22.05.2011 в 03:11
  • Это не очень очевидно из документации, но вы бросаете кавычки, чтобы ссылаться на переменную, установленную в предыдущем действии –  barrymac 22.11.2011 в 17:56
  • @barrymac спасибо за это, никогда бы не догадался. Он работает, но он невероятно уродлив, и IDEA даже сообщает об этом как синтаксическую ошибку, поэтому, если у кого-то есть лучшая идея ...;) Пример для будущих читателей: params="[foo:" $ {it.bar} "]" –  c089 05.04.2012 в 10:44
  • Этот способ может быть немного менее уродливым ... :) params="$ {[foo: it.bar]}" –  Becca Gaspard 17.06.2013 в 21:38
3
params="[customerId: customer.id]"
    
ответ дан Aaditya Bhatta 19.04.2015 в 19:20
  • heelo bro я использовал одну и ту же аннотацию, но получаю нулевое значение в контроллере stackoverflow.com/questions/49855362/... –  Ashwin Karki 16.04.2018 в 12:53
3

Вам нужно обернуть все ваши параметры с помощью $ {}, вместо того, чтобы обернуть каждую переменную, которую вы хотите передать отдельно.

<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>
    
ответ дан Arye Rosenstein 24.02.2016 в 00:10