在Grails控制台中调用TagLib?

在Grails控制台中调用TagLib?,grails,Grails,有没有办法从grails控制台内部调用taglib闭包?我希望能够在grails控制台中获取消息标记,但我无法理解这一点 您可以获得已配置的taglib,但大多数都希望在web请求的上下文中运行。要绕过可以绑定模拟请求的问题,请执行以下操作: import grails.util.GrailsWebUtil GrailsWebUtil.bindMockWebRequest ctx def g = ctx.getBean('org.codehaus.groovy.grails.plugins.

有没有办法从grails控制台内部调用taglib闭包?我希望能够在grails控制台中获取消息标记,但我无法理解这一点

您可以获得已配置的taglib,但大多数都希望在web请求的上下文中运行。要绕过可以绑定模拟请求的问题,请执行以下操作:

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')
使用@Burt更容易,因为我们不必模拟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');
通过在控制台中运行此代码,可以获得应用程序中所有标记库的列表

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