如何将字符串转换成Grails的一段代码,如果它包括与GORM查询?(How to convert

2019-09-26 10:14发布

接下来的一段Groovy代码工作在Grails的(感谢@Will P )为您解答 :

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

可能吗? 怎么样?

Answer 1:

由所使用的类加载器GroovyShell不知道在运行时加载的Grails的神器类。 但是,如果你在Grails的类加载器作为父类加载器传球,班会解决。 Grails的注册其作为线程的上下文类加载器的类加载器,所以这是你想要做什么的快捷方式:

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


文章来源: How to convert a string into a piece of code in Grails if it includes a query with GORM?