我只是按照用户指南使用插件中的trait向控制器添加动态方法。
以下是我的代码:
--- ---性状
package com.ylw.gorm
trait DateTrait {
Date currentDate() {
return new Date()
}
}
--- --- TraitInjector
package com.ylw.gorm
import grails.compiler.traits.TraitInjector
import groovy.transform.CompileStatic
@CompileStatic
class ControllerTraitInjector implements TraitInjector {
@Override
Class getTrait() {
DateTrait
}
@Override
String[] getArtefactTypes() {
['Controller'] as String[]
}
}
--- ---控制器
@Transactional(readOnly = true)
class MyDomainController {
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
def testTrait() {
render "The current date is -> " + currentDate()
}
...
}
我希望控制器能从特征中知道currentDate()方法。但是我在浏览器中收到以下错误:
由MissingMethodException引起:没有方法签名: com.ylw.gorm.MyDomainController.currentDate()适用于 参数类型:()值:[]可能的解决方案:create() 90 | methodMissing in grails.artefact.gsp.TagLibraryInvoker $ Trait $ Helper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 12 | com.ylw.gorm.envers.AuditedDomainController中的$ tt__testTrait 93 | grails.transaction.GrailsTransactionTemplate $ 2中的doInTransaction 90 |在grails.transaction.GrailsTransactionTemplate中执行 1145 | java.util.concurrent.ThreadPoolExecutor中的runWorker 615 |在java.util.concurrent.ThreadPoolExecutor $ Worker中运行 745 |跑 。 。 。在java.lang.Thread
中
我做错了什么?
感谢您的帮助! 映亮
答案 0 :(得分:3)
您还没有显示足够的代码来确定出现了什么问题。
我在https://github.com/jeffbrown/traitplugin创建了一个演示应用。
请参阅以下内容:
从示例代码中复制并粘贴它们。
该应用程序具有以下控制器:
所有这一切似乎都有效。
确保您的应用对插件具有编译时依赖性。