2009-07-28 14 views
15

Na przykład, mogę umieścićCzy mogę używać znacznika grails poza GSP?

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

wewnątrz pliku .gsp i będzie działać dobrze.

Ale również chciałbym używać tego samego zamknięcia createLink wewnątrz pliku .groovy który nie jest częścią poglądów Grails

Odpowiedz

20

można użyć metod TagLib z kontrolerami Grails, na przykład:

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

Dla wbudowanych taglib (lub tych w przestrzeni nazw g) można pominąć prefiks przestrzeni nazw w wywołaniu metody.

+3

Nie może być więcej niż tylko to, używając tylko powyższy kod w kontroler grails daje 'Error = groovy.lang.MissingPropertyException: Nie ma takiego właściwość: G'. – aroth

+0

tam zdecydowanie JEST bardziej do tego! Zobacz odpowiedź Matta Christiansona na pytanie, jak rozwiązać problem "Brak takich właściwości: g". – Twelve24

+0

Myślę, że najpierw należy wstrzyknąć aplikację Grails do kontrolera za pomocą 'def grailsApplication'. W usługach musisz najpierw zdefiniować "g" za pomocą 'def g = gspTagLibraryLookup.lookupNamespaceDispatcher (" g ")'. –

14

Wstrzyknij GrailsAplikacja do usługi/filtra.

def grailsApplication 

I zdobądź Spring bean.

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

Przeszukałem wszystko, aby zobaczyć, jak utworzyć linki w serwisie ... dzięki za zamieszczenie tego! – loeschg

7

Dla klas niezarządzani można odwołać g TagLib z:

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