Могу ли я использовать теги grails вне GSP?

Например, я могу положить

 <g:createLink controller="user" action="show" /> 

внутри файла .gsp, и он будет работать хорошо.

Но также я хотел бы использовать одно и то же закрытие createLink внутри файла .groovy, который не является частью представлений grails

Ответы

Ответ 1

Вы можете использовать методы taglib у контроллеров Grails, например:

def userShow = g.createLink(controller:"user", action:"show")

Для встроенных taglib (или в пространстве имен g) вы можете опустить префикс пространства имен в вызове метода.

Ответ 2

Внесите grailsApplication в ваш сервис/фильтр.

def grailsApplication

И получите Spring bean.

def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
def userShow = g.createLink(controller: 'user', action: 'show')

Ответ 3

Для неуправляемых классов вы можете ссылаться на тег g с помощью:

def g = ApplicationHolder.application.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')

Ответ 4

Собственный способ сделать это с Grails 2.0 за пределами контроллеров (так что для сервисов, асинхронных заданий и т.д.) следует использовать класс LinkGenerator. Работает повсюду и упоминается в официальных документах. См. Пример здесь

http://mrhaki.blogspot.ca/2012/01/grails-goodness-generate-links-outside.html