Я начал это как комментарий к ответу Билла Джеймса, но подумал, что это может быть дольше. Билл предложил использовать Groovy-код внутри $ {}, чтобы шаблон (называемый частичным в Rails) работал глобально:
<g:each in="${ Category.findAll() }" var="cat" />
Но вы не должны просто добавлять код, если не чувствуете, что он может испортить ваш аккуратный xml / html. Вы всегда можете поместить его в замыкание внутри TagLib и таким образом сделать его тегом. У замыкания не должно быть никаких параметров, параметров attr, attr и body, но другие сигнатуры недопустимы.
class CustomTagLib {
static namespace = 'cus'
def categories = { attr, body ->
g.each( in: Category.findAll(), var: attr?.var ?: 'categories' )
}
}
Затем вы можете использовать этот тег в шаблоне с выбранным пространством имен:
<cus:categories />
Лично я предпочитаю использовать теги, поскольку в большинстве случаев это код многократного использования, поэтому лучше не нарушать принцип СУХОГО.