我只是按照用户指南使用插件中的trait向控制器添加动态方法。
以下是我的代码:
---Trait---
package com.ylw.gorm
trait DateTrait {
Date currentDate() {
return new Date()
}
}
---TraitInject
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()
}
...
}
我希望控制器能从trait中知道当前日期()方法。但是我在浏览器中得到了以下错误:
由MissingMEODException引起:没有方法的签名:com. ylw.gorm.MyDomainController.当前日期()适用于参数类型:()值:[]可能的解决方案:create()90|在grails.artefact.gsp.TagLibraryInvoker$Trait$Helper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 12|$tt__testTrait在com.ylw.gorm.envers.AuditedDomainController 93|doInTransaction in grails.transaction.GrailsTransactionTemplate2$90|在grails.transaction.GrailsTransactionTemplate 1145|runWorker in java.util.concurrent.ThreadPoolExecator 615|在java.util.concurrent.ThreadPoolExecator$Worker 745|在java.lang.Thread中运行 . . .
我做错了什么?
谢谢帮忙!英良
您没有显示足够的代码来确定出了什么问题。
我在https://github.com/jeffbrown/traitplugin.创建了一个演示应用程序
请参阅以下内容:
https://github.com/jeffbrown/traitplugin/blob/b76af469a0695a449f28c43479ce60d9081c252e/datehelper/src/main/groovy/com/ylw/gorm/ControllerTraitInjector.groovy
https://github.com/jeffbrown/traitplugin/blob/b76af469a0695a449f28c43479ce60d9081c252e/datehelper/src/main/groovy/com/ylw/gorm/DateTrait.groovy
这些是从您的示例代码中复制和粘贴的。
该应用程序在以下位置有一个控制器:
https://github.com/jeffbrown/traitplugin/blob/b76af469a0695a449f28c43479ce60d9081c252e/demo/grails-app/controllers/demo/MyDomainController.groovy
所有这些似乎都奏效了。
确保您的应用对插件具有编译时依赖性。