2011-12-17 60 views
3

出於某種原因,我得到一個巨大的錯誤列表使用時,下面的代碼:使用grailsApplication注射內UrlMappings

class UrlMappings { 
    static grailsApplication 
    static mappings = { 

    grailsApplication.controllerClasses.each { controllerClass -> // FAILS! 
     println(controllerClass.name) 
    } 

    "/$controller/$action?/$id?"{} 

    "/"(view:"/index") 
    "500"(view:'/error') 
} 

錯誤:http://pastebin.com/tiEsENie


凡爲下面的代碼工作得很好,並打印出所有控制器名稱:

class UrlMappings { 
    static grailsApplication 
static mappings = { 

    "/$controller/$action?/$id?"{ 
     grailsApplication.controllerClasses.each { controllerClass -> // WORKS! 
      println(controllerClass.name) 
     } 
    } 

    "/"(view:"/index") 
    "500"(view:'/error') 
} 
} 

是不是可以訪問sta來自static mappings的圖片grailsApplication

(我需要能夠獲得以動態創建urlmappings控制器名稱)

+0

本質上不使用`$ controller`?爲什麼你需要遍歷控制器並將其打印在映射中呢? – omarello 2011-12-17 00:42:59

+0

另外,可能重複? [http://stackoverflow.com/questions/4232884/dynamic-grails-url-mapping-config](http://stackoverflow.com/questions/4232884/dynamic-grails-url-mapping-config) – omarello 2011-12-17 00:46:42

回答

2

雖然ApplicationHolder仍然有效,Grails的文檔說明這一點對於在棄用評論


棄用:使用依賴注入或實現GrailsApplicationAware代替


由於grailsUrlMappingsHolderBean implements GrailsApplicationAware,我發現下面的代碼也適用於2.0以及

class UrlMappings { 
    static mappings = {   
     getGrailsApplication().controllerClasses.each{ controllerClass -> 
      if(controllerClass.name./*your logic here*/){ 
       "/mod/action" { 
        controller = "${controllerClass.name}" 
       } 
      } 
     } 
    } 
}