如果它包含一个GORM查询,如何将字符串转换为Grails中的一段代码?

时间:2013-07-05 14:32:48

标签: grails reflection groovy

下一段Groovy代码适用于@Will P的Grails(感谢your answer):

String string2code = "variable = 'hello'; return variable.toUpperCase()";

def result = new GroovyShell().evaluate string2code
assert result == "HELLO"

不幸的是,如果我们引入Grails的魔法查询,它就会失败:

String string2code = "return DomainClassExample.findByName('hello')";
// String string2code = "DomainClassExample.where { name == 'hello' }"
def queryResult = new GroovyShell().evaluate string2code

这是错误:

Class
    groovy.lang.MissingPropertyException
Message
    No such property: DomainClassExample for class: Script1

有可能吗?怎么样?

1 个答案:

答案 0 :(得分:2)

GroovyShell使用的类加载器不知道在运行时加载的Grails工件类。但是如果您将Grails类加载器作为其父类加载器传递,则类将解析。 Grails将其类加载器注册为线程的上下文类加载器,因此这是一种快速执行所需操作的方法:

def queryResult = new GroovyShell(Thread.currentThread().contextClassLoader).evaluate string2code