aio*_*los 6 grails groovy mixins
在我最新的grails 2.3.0项目中,我正在使用@Mixin注释混合一个帮助类来保持我的controller更干.
如果在控制器内进行一些更改以强制重新编译控制器,则mixin正在工作.在初始compile(grails run-app)之后,助手没有混入 - 我MissingMethodException试图从助手类访问一个方法.
这是我的助手src/groovy:
class ProjectHelper {
def withProject(id, Closure c) {
def project = Project.get(id)
if (project) {
c.call project
} else {
flash.message = 'Project not found!'
render view: 'myView'
return
}
}
}
Run Code Online (Sandbox Code Playgroud)
和(其中一个)controller使用ProjectHelper:
@Mixin(ProjectHelper)
class ProjectController {
def index() {
withProject params.projectId, {project ->
// do something with the project
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用grails clean并启动应用程序清理项目时,访问后出现以下错误project/index:
MissingMethodException occurred when processing request:
[GET] /<myApp>/project/
No signature of method: <myPackage>.withProject() is applicable for argument types:
(java.lang.String, <myPackage>.ProjectController$_index_closure1_closure10) values:
[1, <myPackage>.ProjectController$_index_closure1_closure10@40d889b5]
Run Code Online (Sandbox Code Playgroud)
在进行一些更改ReportController(例如添加单个空格)之后,grails会编译2个源文件,并且withProject可以使用该方法.访问project/index按预期工作.
这里出了什么问题?这是一个错误还是我错过了什么?
更新
事实证明,我完全错过了,因为缺少对类混合的属性(在我的情况下: )(参见JIRA这个问题)的访问权限(在重新编译之后),因此使用了grails.util.Mixin另一个异常().MissingPropertyExceptionflashgroovy.lang.Mixin
有没有办法groovy.lang.Mixin在运行时手动重新编译/注入/混合,或者我必须找到该else部件的另一个错误处理,直到问题得到解决?
有什么建议?
MissingMethodException当我使用 mixin 遵循类似的代码重用模式时,我经常遇到同样的情况。
就我而言,更改groovy.lang.Mixin为grails.util.Mixin(或更具体地说,向我的控制器添加导入grails.util.Mixin)完全解决了问题。
至于无法访问控制器变量,您可能会陷入等待GRAILS-9905解决的困境。我应该注意到,缺陷讨论中列出了一些建议的解决方法。
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |