我使用下面的代码遇到了问题。我添加invalidToken处理程序时收到错误。我使用的是Grails V 2.3.4
withForm {
// ready to go
}.invalidToken {
// bad submit
}
blaaaa / blaaa / controller.groovy:123:[静态类型检查] - 不能 找到匹配方法 java.lang.Object继承#invalidToken(groovy.lang.Closure)。请检查是否 声明的类型是正确的,如果方法存在。 @第123行, 第9栏。 withForm { ^
答案 0 :(得分:0)
正如您所看到的,使用@CompileStatic
会导致动态代码失败,因此您需要重新编写一些代码才能兼容。然而,Grails中有许多功能与@CompileStatic
不兼容,因为它是一个相对较新的功能;自从2.2版本开始使用Groovy 2.0以来,它只能在Grails中使用。
因此,您必须将withForm
块修改为非动态。我最近没有查看底层代码,但我猜你可以做到,但它会很难看,你会希望你没有。在有意义的地方使用@CompileStatic
(它会产生差异;这个代码块的性能差异可能是几毫秒)。
我还没有足够确定@CompileStatic
,但我非常有信心你可以随时删除注释并且代码可以正常工作;然后你会有冗余的强制转换和非动态代码,但它仍然是完全有效的Groovy。