在UrlMappings中使用grailsApplication注入
出于某种原因,在使用以下代码时,我会收到大量错误列表:在UrlMappings中使用grailsApplication注入,grails,grails-controller,Grails,Grails Controller,出于某种原因,在使用以下代码时,我会收到大量错误列表: class UrlMappings { static grailsApplication static mappings = { grailsApplication.controllerClasses.each { controllerClass -> // FAILS! println(controllerClass.name) } "/$controller/$actio
class UrlMappings {
static grailsApplication
static mappings = {
grailsApplication.controllerClasses.each { controllerClass -> // FAILS!
println(controllerClass.name)
}
"/$controller/$action?/$id?"{}
"/"(view:"/index")
"500"(view:'/error')
}
错误:
其中,以下代码工作正常,并打印所有控制器名称:
class UrlMappings {
static grailsApplication
static mappings = {
"/$controller/$action?/$id?"{
grailsApplication.controllerClasses.each { controllerClass -> // WORKS!
println(controllerClass.name)
}
}
"/"(view:"/index")
"500"(view:'/error')
}
}
是否可以从内部静态映射访问静态grailsApplication
(我需要能够获取控制器名称,以便动态创建urlmappings)当ApplicationHolder
仍然有效时,grails文档在弃用注释中为
已弃用:使用依赖项注入或实现GrailsApplicationWare
由于grailsUrlMappingsHolderBean
实现了GrailsApplicationAware
,我发现下面的代码也可以在2.0中使用
class UrlMappings {
static mappings = {
getGrailsApplication().controllerClasses.each{ controllerClass ->
if(controllerClass.name./*your logic here*/){
"/mod/action" {
controller = "${controllerClass.name}"
}
}
}
}
}
使用$controller
本质上不是你想要的吗?为什么还要在控制器上循环并在映射中打印它们?还有,可能是重复的?因为我想将所有版主控制器拆分为/mod/action,所以我查看了给定的示例,但不起作用,因为在当前的2.0版本中,ApplicationHolder
已被弃用。虽然已弃用,但它仍然存在,并且可以正常工作。这导致我的集成测试无法继续工作。。这可能是因为我们正在从静态环境调用非静态的东西吗?这也破坏了我的集成测试。通过使用if(Environment.current!=Environment.TEST){..}包装来解决问题