2009-07-28 10 views
15

Por ejemplo, puedo poner¿Puedo usar la etiqueta Grails fuera de GSP?

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

dentro de un archivo .gsp y que va a funcionar muy bien.

Pero también me gustaría usar el mismo cierre createLink dentro de un archivo .groovy que no forma parte de los puntos de vista de Grails

Respuesta

20

Puede utilizar métodos taglib de controladores Grails, por ejemplo:

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

Para taglibs incorporados (o aquellos en el espacio de nombres g) puede omitir el prefijo del espacio de nombres en la llamada al método.

+3

Tiene que haber más que eso, utilizando sólo el código anterior en un controlador griales da 'error = groovy.lang.MissingPropertyException: No existe la propiedad: G'. – aroth

+0

definitivamente hay más en eso! Vea la respuesta de Matt Christianson sobre cómo resolver el error "No such property: g". – Twelve24

+0

Creo que primero debe inyectar la aplicación Grails al controlador con 'def grailsApplication'. En servicios, primero debe definir la 'g' con 'def g = gspTagLibraryLookup.lookupNamespaceDispatcher (" g ")'. –

14

Inyecte la aplicación grails en su servicio/filtro.

def grailsApplication 

Y obtener el grano de primavera.

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

He buscado todo para ver cómo crear enlaces en un servicio ... ¡gracias por publicar esto! – loeschg

7

Para las clases no administrados puede hacer referencia al taglib g con:

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