在grails框架中导入groovy脚本方法(四)
前面都写了三个方法了,都不是能用的方法。这是最后的方法了……
以上三种方法都不支持导入功能,例如:在你的外部script中加入:
import MyProject.domain.User;
这时你就可以把user作为一个对象 开始应用了!
这是我的script:
def query1={String dd=User.findByName("license")?.value //在这里我使用了grails里domain的方法: println dd } def query2={ println "this is query3" query1.run() //这是闭包之间的调用; }在主程序里面这样写:
File scriptFile = new File("controllers\\${scriptName}") Script script = new GroovyClassLoader().parseClass(scriptFile).newInstance() script.binding = new Binding(["service2": new PluginService(), "params": params]) return script.run()oK就可以了
当然这也有很多的不足,这里面只能支持闭包,无法调用方法,如果我在运行script时,不是想运行这个script而是运行它里面的一个方法,怎么办?
我是这样解决的:
在主程序中导入一个参数:methodName,这是你所应用script中方法的名称。
File scriptFile = new File("controllers\\${scriptName}") Script script = new GroovyClassLoader().parseClass(scriptFile).newInstance() script.binding = new Binding(["service2": new PluginService(), "params":params])if(methodName){ //如果调用脚本时有method传入,则……return script.invokeMethod(methodName,binding) }else{return script.run()} 这个方法已经测试过了,可以应用啊!
………… 1 楼 agile_boy 2012-06-25 不建议在Grails这样使用Groovy