Interesting issue that left me scratching my head this morning…
using gsp tags, you can iterate over arrays:
<g:each in="${myarray}"> <p>${it.title}</p> </g:each>
but if you do something slightly more clever:
<g:each in="${myarray}"> <p><g:link action='myaction' id='${it.id}'>${it.title}</g:link></p> </g:each>
You’ll get null pointer exceptions.
Why?
Because the <g:link> tag creates its own instance of the special variable it inside its own ‘domain’.
Fix
add the parameter var='myvar' to the <g:each”> tag: <g:each in="${myarray}" var="myvar">. Then, use ${myvar.id} and ${myvar.title} in your code:
<g:each in="${myarray}" var="myvar"> <p><g:link action='myaction' id='${myvar.id}'>${myvar.title}</g:link></p> </g:each>
And everything should work again.