Могу ли я использовать теги 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