2009-07-28 13 views
15

Per esempio, posso metterePosso utilizzare tag Grails al di fuori di GSP?

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

all'interno di un file .gsp e funzionerà bene.

ma anche mi piacerebbe utilizzare la stessa chiusura createLink all'interno di un file .groovy che non fa parte dei punti di vista Grails

risposta

20

È possibile utilizzare metodi taglib da controllori Grails, ad esempio:

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

Per i tagli integrati (o quelli nello spazio dei nomi g) è possibile omettere il prefisso dello spazio dei nomi nella chiamata al metodo.

+3

Ci deve essere qualcosa di più che, utilizzando solo il codice di cui sopra in un controller graal dà 'errore = groovy.lang.MissingPropertyException: No tali beni: G'. – aroth

+0

sicuramente c'è di più! Vedere la risposta di Matt Christianson su come risolvere l'errore "No such property: g". – Twelve24

+0

Penso che tu debba prima iniettare grailsApplication sul controller con 'def grailsApplication'. Nei servizi è necessario prima definire la 'g' con 'def g = gspTagLibraryLookup.lookupNamespaceDispatcher (" g ")'. –

14

Iniettare GrailsApplication nel servizio/filtro.

def grailsApplication 

E ottenere il fagiolo di primavera.

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

Ho cercato dappertutto per vedere come creare collegamenti in un servizio ... grazie per aver postato questo! – loeschg

7

Per le classi non gestite è possibile fare riferimento al g taglib con:

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