Вызов материала TagLib в консоли Grails?

Есть ли способ вызвать закрытие taglib внутри консоли grails? Я хочу иметь возможность получить тег сообщения внутри консоли grails, и я не могу понять это...

Ответ 1

Вы можете получить настроенный taglib, но большинство ожидает, что оно будет запущено в контексте веб-запроса. Чтобы обойти это, вы можете связать запрос mock:

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')

Вы также можете получить сообщения для других языков, установив язык запроса, например.

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')

Ответ 2

Используя @Burt консольный плагин, это еще проще, поскольку нам не нужно издеваться над веб-запросом...

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');

Вы можете получить список всех tagLib в своем приложении, запустив этот код в консоли...

// 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