在升级到Grails 2.3.5之后,我发现我的mixins只有在关闭JVM forking时才能工作。
我所有的控制器都有这样的代码
import util.MyMixin
@Mixin(MyMixin)
class MyController {其中MyMixin是在src/groovy/util中定义的,如下所示
package util
class MyMixin {
private def aMethod(someArgs) {
// do something
}
}当BuildConfig.groovy包含以下代码时
forkConfig = [maxMemory: 1024, minMemory: 64, debug: false, maxPerm: 256]
grails.project.fork = [
test: forkConfig, // configure settings for the test-app JVM
run: forkConfig, // configure settings for the run-app JVM
war: forkConfig, // configure settings for the run-war JVM
console: forkConfig // configure settings for the Swing console JVM
]然后我得到了下面的错误
MissingMethodException occurred when processing request:
No signature of method: MyController.aMethod() is applicable for argument types参数类型匹配的地方,当然,当我在BuildConfig.groovy中没有JVM forking代码时,代码可以正常工作。
在派生JVM时,我需要做什么特殊的事情才能让mixins工作吗?我之所以使用forking,是因为Grails 2.3.5推荐使用它,而我没有使用它时遇到了问题:Grails 2.3.5 requiring "grails clean" after every code change
发布于 2014-05-31 11:07:13
我在Grails域对象中使用Mixins时遇到了困难,听说您在使用控制器时遇到了困难,这并不奇怪。域、控制器和服务由Grails大量管理,难怪正常的@Mixins可能会以某种方式被破坏。我已经成功地通过metaClass构建器DSL注入了方法,如下所示:
targetClass.metaClass {
someMethod { someParam ->
// do something
}
}你必须自己在所有的目标类上调用它...它不像@Mixin那样优雅,但似乎可以工作。
https://stackoverflow.com/questions/21837693
复制相似问题