2010-05-06 3 views
10

Existe-t-il un moyen d'appeler une fermeture taglib depuis l'intérieur de la console? Je veux être en mesure d'obtenir à l'étiquette de message dans la console de grails et je ne peux pas comprendre ceci ...Appel de TagLib dans la console Grails?

Répondre

11

Vous pouvez obtenir le taglib configuré, mais la plupart s'attendent à être exécuté dans le contexte d'une demande Web. Pour contourner que vous pouvez lier une demande maquette:

import grails.util.GrailsWebUtil 

GrailsWebUtil.bindMockWebRequest ctx 

def g = ctx.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib') 
String message = g.message(code: 'default.button.delete.confirm.message') 

Vous pouvez également obtenir des messages pour d'autres langues en définissant les paramètres régionaux de la demande, par exemple

import grails.util.GrailsWebUtil 

def webRequest = GrailsWebUtil.bindMockWebRequest(ctx) 
webRequest.currentRequest.addPreferredLocale(Locale.GERMANY) 

def g = ctx.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib') 
String message = g.message(code: 'default.button.delete.confirm.message') 
3

En utilisant ce @Burt console plugin est encore plus facile que nous n'avons pas à se moquer de la demande web ...

import org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib 

// Getting the class name to reduce horizontal 
// scrolling in StackOverflow 
def g = ctx.getBean(ValidationTagLib.class.getName()) 

g.message(code: 'default.button.delete.confirm.message'); 

Vous pouvez obtenir une liste de tous les Taglibs dans votre application en cours d'exécution ce code dans la console ...

// prints a bean name per line. 
ctx.getBeanNamesForType(Object).findAll { 
    it =~ /.*TagLib$/ 
} .sort() {println it} 

// add false to prevent console printing the map out 
false 
Questions connexes