@Enhances Grails 控制器

Gre*_*egg 5 grails controller traits

我有一个像这样定义的特征:

@Enhances(ControllerArtefactHandler.TYPE)
trait NullCheckTrait {
   def nullCheck(def object) {
      // code here
   }
}
Run Code Online (Sandbox Code Playgroud)

当我nullCheck(foo)从控制器调用时,出现No signature of method异常。如果我implements NullCheckTrait在控制器上,它工作正常。我读过它@Enhances只有在我创建一个 grails 插件并将特征放在那里时才有效。我很好奇这是否是一个已知问题,以及是否有办法@Enhances从与控制器相同的 grails 应用程序中使其工作。

Gra*_*her 3

不,没有办法解决这个问题,因为@Enhances类在编译之前需要位于类路径上。例如,假设您的控制器类首先被编译,然后是您的特征,那么该特征将不会被应用,并且由于无法控制编译顺序,这仍然是一个问题。

在同一项目中完成此操作的唯一其他方法是在 Gradle 中设置额外的源集,请参阅:

如何向 Gradle 添加新的源集?